mirror of
https://github.com/barryvdh/laravel-ide-helper.git
synced 2026-08-18 10:07:12 +00:00
feat(pivot): add support for multiple pivot types when using the same accessor (#1597)
* feat(pivot): add support for multiple pivot types when using the same accessor
* composer fix-style
* changelog
* resolve namespaces
* Revert "resolve namespaces"
This reverts commit 37559ab089.
* resolve namespaces
---------
Co-authored-by: laravel-ide-helper <[email protected]>
This commit is contained in:
co-authored by
laravel-ide-helper
parent
4b051e45c7
commit
dc70337e48
+7
-1
@@ -2,7 +2,13 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
[Next release](https://github.com/barryvdh/laravel-ide-helper/compare/v3.1.0...master)
|
[Next release](https://github.com/barryvdh/laravel-ide-helper/compare/v3.2.0...master)
|
||||||
|
--------------
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
Add support for multiple pivot types when using the same accessor.
|
||||||
|
|
||||||
|
2024-10-18, 3.2.0
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|||||||
@@ -714,14 +714,25 @@ class ModelsCommand extends Command
|
|||||||
if ($relationObj instanceof BelongsToMany) {
|
if ($relationObj instanceof BelongsToMany) {
|
||||||
$pivot = get_class($relationObj->newPivot());
|
$pivot = get_class($relationObj->newPivot());
|
||||||
if (!in_array($pivot, [Pivot::class, MorphPivot::class])) {
|
if (!in_array($pivot, [Pivot::class, MorphPivot::class])) {
|
||||||
|
$pivot = $this->getClassNameInDestinationFile($model, $pivot);
|
||||||
|
|
||||||
|
if ($existingPivot = ($this->properties[$relationObj->getPivotAccessor()] ?? null)) {
|
||||||
|
// If the pivot is already set, we need to append the type to it
|
||||||
|
$pivot .= '|' . $existingPivot['type'];
|
||||||
|
} else {
|
||||||
|
// pivots are not always set
|
||||||
|
$pivot .= '|null';
|
||||||
|
}
|
||||||
|
|
||||||
$this->setProperty(
|
$this->setProperty(
|
||||||
$relationObj->getPivotAccessor(),
|
$relationObj->getPivotAccessor(),
|
||||||
$this->getClassNameInDestinationFile($model, $pivot),
|
$pivot,
|
||||||
true,
|
true,
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Collection or array of models (because Collection is Arrayable)
|
//Collection or array of models (because Collection is Arrayable)
|
||||||
$relatedClass = '\\' . get_class($relationObj->getRelated());
|
$relatedClass = '\\' . get_class($relationObj->getRelated());
|
||||||
$collectionClass = $this->getCollectionClass($relatedClass);
|
$collectionClass = $this->getCollectionClass($relatedClass);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||||||
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models;
|
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models;
|
||||||
|
|
||||||
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots\CustomPivot;
|
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots\CustomPivot;
|
||||||
|
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots\DifferentCustomPivot;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class ModelWithPivot extends Model
|
class ModelWithPivot extends Model
|
||||||
@@ -15,4 +16,26 @@ class ModelWithPivot extends Model
|
|||||||
->using(CustomPivot::class)
|
->using(CustomPivot::class)
|
||||||
->as('customAccessor');
|
->as('customAccessor');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function relationWithDifferentCustomPivot()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany(ModelwithPivot::class)
|
||||||
|
->using(DifferentCustomPivot::class)
|
||||||
|
->as('differentCustomAccessor');
|
||||||
|
}
|
||||||
|
|
||||||
|
// without an accessor
|
||||||
|
|
||||||
|
public function relationCustomPivotUsingSameAccessor()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany(ModelwithPivot::class)
|
||||||
|
->using(CustomPivot::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function relationWithDifferentCustomPivotUsingSameAccessor()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany(ModelwithPivot::class)
|
||||||
|
->using(DifferentCustomPivot::class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Relations\Pivot;
|
||||||
|
|
||||||
|
class DifferentCustomPivot extends Pivot
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -5,14 +5,23 @@ declare(strict_types=1);
|
|||||||
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models;
|
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models;
|
||||||
|
|
||||||
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots\CustomPivot;
|
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots\CustomPivot;
|
||||||
|
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots\DifferentCustomPivot;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @property-read CustomPivot $customAccessor
|
* @property-read DifferentCustomPivot|CustomPivot|null $pivot
|
||||||
|
* @property-read \Illuminate\Database\Eloquent\Collection<int, ModelWithPivot> $relationCustomPivotUsingSameAccessor
|
||||||
|
* @property-read int|null $relation_custom_pivot_using_same_accessor_count
|
||||||
|
* @property-read CustomPivot|null $customAccessor
|
||||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, ModelWithPivot> $relationWithCustomPivot
|
* @property-read \Illuminate\Database\Eloquent\Collection<int, ModelWithPivot> $relationWithCustomPivot
|
||||||
* @property-read int|null $relation_with_custom_pivot_count
|
* @property-read int|null $relation_with_custom_pivot_count
|
||||||
|
* @property-read DifferentCustomPivot|null $differentCustomAccessor
|
||||||
|
* @property-read \Illuminate\Database\Eloquent\Collection<int, ModelWithPivot> $relationWithDifferentCustomPivot
|
||||||
|
* @property-read int|null $relation_with_different_custom_pivot_count
|
||||||
|
* @property-read \Illuminate\Database\Eloquent\Collection<int, ModelWithPivot> $relationWithDifferentCustomPivotUsingSameAccessor
|
||||||
|
* @property-read int|null $relation_with_different_custom_pivot_using_same_accessor_count
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|ModelWithPivot newModelQuery()
|
* @method static \Illuminate\Database\Eloquent\Builder<static>|ModelWithPivot newModelQuery()
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|ModelWithPivot newQuery()
|
* @method static \Illuminate\Database\Eloquent\Builder<static>|ModelWithPivot newQuery()
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|ModelWithPivot query()
|
* @method static \Illuminate\Database\Eloquent\Builder<static>|ModelWithPivot query()
|
||||||
@@ -26,6 +35,28 @@ class ModelWithPivot extends Model
|
|||||||
->using(CustomPivot::class)
|
->using(CustomPivot::class)
|
||||||
->as('customAccessor');
|
->as('customAccessor');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function relationWithDifferentCustomPivot()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany(ModelwithPivot::class)
|
||||||
|
->using(DifferentCustomPivot::class)
|
||||||
|
->as('differentCustomAccessor');
|
||||||
|
}
|
||||||
|
|
||||||
|
// without an accessor
|
||||||
|
|
||||||
|
public function relationCustomPivotUsingSameAccessor()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany(ModelwithPivot::class)
|
||||||
|
->using(CustomPivot::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function relationWithDifferentCustomPivotUsingSameAccessor()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany(ModelwithPivot::class)
|
||||||
|
->using(DifferentCustomPivot::class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
@@ -46,3 +77,22 @@ use Illuminate\Database\Eloquent\Relations\Pivot;
|
|||||||
class CustomPivot extends Pivot
|
class CustomPivot extends Pivot
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Pivot\Models\Pivots;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Relations\Pivot;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder<static>|DifferentCustomPivot newModelQuery()
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder<static>|DifferentCustomPivot newQuery()
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder<static>|DifferentCustomPivot query()
|
||||||
|
* @mixin \Eloquent
|
||||||
|
*/
|
||||||
|
class DifferentCustomPivot extends Pivot
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user