Add pivot class property (#1518)

* Add pivot class property

* Add test for pivot class properties

* Fix failed test for pivot class properties

* Update CHANGELOG.md

* Fix failed test
This commit is contained in:
dev2a
2024-03-11 14:37:15 +01:00
committed by GitHub
parent bc1d67f01c
commit ac7e186270
6 changed files with 107 additions and 0 deletions
+1
View File
@@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file.
### Changed
### Added
- Add type to pivot when using a custom pivot class [#1518 / d3v2a](https://github.com/barryvdh/laravel-ide-helper/pull/1518)
2024-03-01, 3.0.0
------------------
+13
View File
@@ -34,8 +34,10 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Relations\HasOneThrough;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Database\Eloquent\Relations\MorphOne;
use Illuminate\Database\Eloquent\Relations\MorphPivot;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\Relations\MorphToMany;
use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Schema\Builder;
use Illuminate\Filesystem\Filesystem;
@@ -708,6 +710,17 @@ class ModelsCommand extends Command
strpos(get_class($relationObj), 'Many') !== false
)
) {
if ($relationObj instanceof BelongsToMany) {
$pivot = get_class($relationObj->newPivot());
if (!in_array($pivot,[ Pivot::class, MorphPivot::class])) {
$this->setProperty(
$relationObj->getPivotAccessor(),
$this->getClassNameInDestinationFile($model,$pivot),
true,
false
);
}
}
//Collection or array of models (because Collection is Arrayable)
$relatedClass = '\\' . get_class($relationObj->getRelated());
$collectionClass = $this->getCollectionClass($relatedClass);
@@ -0,0 +1,16 @@
<?php
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots\CustomPivot;
use Illuminate\Database\Eloquent\Model;
class ModelWithPivot extends Model
{
public function relationWithCustomPivot()
{
return $this->belongsToMany(ModelwithPivot::class)
->using(CustomPivot::class)
->as('customAccessor');
}
}
@@ -0,0 +1,10 @@
<?php
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots;
use Illuminate\Database\Eloquent\Relations\Pivot;
class CustomPivot extends Pivot
{
}
@@ -0,0 +1,22 @@
<?php
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand;
class Test extends AbstractModelsCommand
{
public function test(): void
{
$command = $this->app->make(ModelsCommand::class);
$tester = $this->runCommand($command, [
'--write' => true,
]);
$this->assertSame(0, $tester->getStatusCode());
$this->assertStringContainsString('Written new phpDocBlock to', $tester->getDisplay());
$this->assertMatchesMockedSnapshot();
}
}
@@ -0,0 +1,45 @@
<?php
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots\CustomPivot;
use Illuminate\Database\Eloquent\Model;
/**
*
*
* @property-read CustomPivot $customAccessor
* @property-read \Illuminate\Database\Eloquent\Collection<int, ModelWithPivot> $relationWithCustomPivot
* @property-read int|null $relation_with_custom_pivot_count
* @method static \Illuminate\Database\Eloquent\Builder|ModelWithPivot newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ModelWithPivot newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ModelWithPivot query()
* @mixin \Eloquent
*/
class ModelWithPivot extends Model
{
public function relationWithCustomPivot()
{
return $this->belongsToMany(ModelwithPivot::class)
->using(CustomPivot::class)
->as('customAccessor');
}
}
<?php
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots;
use Illuminate\Database\Eloquent\Relations\Pivot;
/**
*
*
* @method static \Illuminate\Database\Eloquent\Builder|CustomPivot newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|CustomPivot newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|CustomPivot query()
* @mixin \Eloquent
*/
class CustomPivot extends Pivot
{
}