mirror of
https://github.com/barryvdh/laravel-ide-helper.git
synced 2026-08-18 10:07:12 +00:00
Created a positiblity to add custom relation type (#987)
* Created a positiblity to add custom relation type * Changed access modifier Co-authored-by: Markus Podar <[email protected]> * fixed hints from code review * Added Test for https://github.com/barryvdh/laravel-ide-helper/pull/987 * composer fix-style * Clarify doc in config entry * Update CHANGELOG.md Co-authored-by: Markus Podar <[email protected]>
This commit is contained in:
@@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Models;
|
||||
|
||||
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\ModelsOtherNamespace\AnotherModel;
|
||||
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Traits\HasTestRelations;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
@@ -17,6 +18,8 @@ use Illuminate\Database\Eloquent\Relations\MorphToMany;
|
||||
|
||||
class Simple extends Model
|
||||
{
|
||||
use HasTestRelations;
|
||||
|
||||
// Regular relations
|
||||
public function relationHasMany(): HasMany
|
||||
{
|
||||
@@ -84,4 +87,14 @@ class Simple extends Model
|
||||
{
|
||||
return $this->belongsTo(AnotherModel::class, __FUNCTION__);
|
||||
}
|
||||
|
||||
public function relationSampleToManyRelationType()
|
||||
{
|
||||
return $this->testToOneRelation(Simple::class);
|
||||
}
|
||||
|
||||
public function relationSampleRelationType()
|
||||
{
|
||||
return $this->testToManyRelation(Simple::class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,9 +6,22 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations;
|
||||
|
||||
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
|
||||
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand;
|
||||
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToManyRelationType;
|
||||
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToOneRelationType;
|
||||
use Illuminate\Support\Facades\Config;
|
||||
|
||||
class Test extends AbstractModelsCommand
|
||||
{
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
Config::set('ide-helper.additional_relation_types', [
|
||||
'testToOneRelation' => SampleToOneRelationType::class,
|
||||
'testToManyRelation' => SampleToManyRelationType::class,
|
||||
]);
|
||||
}
|
||||
|
||||
public function test(): void
|
||||
{
|
||||
$command = $this->app->make(ModelsCommand::class);
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Traits;
|
||||
|
||||
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToManyRelationType;
|
||||
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types\SampleToOneRelationType;
|
||||
|
||||
trait HasTestRelations
|
||||
{
|
||||
public function testToOneRelation($related)
|
||||
{
|
||||
$instance = $this->newRelatedInstance($related);
|
||||
return new SampleToOneRelationType($instance->newQuery(), $this);
|
||||
}
|
||||
|
||||
public function testToManyRelation($related)
|
||||
{
|
||||
$instance = $this->newRelatedInstance($related);
|
||||
return new SampleToManyRelationType($instance->newQuery(), $this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types;
|
||||
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Illuminate\Database\Eloquent\Relations\Relation;
|
||||
|
||||
class SampleToManyRelationType extends Relation
|
||||
{
|
||||
public function addConstraints()
|
||||
{
|
||||
// Fake
|
||||
}
|
||||
|
||||
public function addEagerConstraints(array $models)
|
||||
{
|
||||
// Fake
|
||||
}
|
||||
|
||||
public function initRelation(array $models, $relation)
|
||||
{
|
||||
// Fake
|
||||
}
|
||||
|
||||
public function match(array $models, Collection $results, $relation)
|
||||
{
|
||||
// Fake
|
||||
}
|
||||
|
||||
public function getResults()
|
||||
{
|
||||
// Fake
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Types;
|
||||
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\Concerns\SupportsDefaultModels;
|
||||
use Illuminate\Database\Eloquent\Relations\Relation;
|
||||
|
||||
/**
|
||||
* Sample for custom relation
|
||||
*
|
||||
* the relation is a big fake and only for testing of the docblock generation
|
||||
*
|
||||
* @package Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations
|
||||
*/
|
||||
class SampleToOneRelationType extends Relation
|
||||
{
|
||||
use SupportsDefaultModels;
|
||||
|
||||
public function addConstraints()
|
||||
{
|
||||
// Fake
|
||||
}
|
||||
|
||||
public function addEagerConstraints(array $models)
|
||||
{
|
||||
// Fake
|
||||
}
|
||||
|
||||
public function initRelation(array $models, $relation)
|
||||
{
|
||||
// Fake
|
||||
}
|
||||
|
||||
public function match(array $models, Collection $results, $relation)
|
||||
{
|
||||
// Fake
|
||||
}
|
||||
|
||||
public function getResults()
|
||||
{
|
||||
// Fake
|
||||
}
|
||||
|
||||
protected function newRelatedInstanceFor(Model $parent)
|
||||
{
|
||||
// Fake
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Models;
|
||||
|
||||
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\ModelsOtherNamespace\AnotherModel;
|
||||
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\Relations\Traits\HasTestRelations;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
@@ -38,6 +39,9 @@ use Illuminate\Database\Eloquent\Relations\MorphToMany;
|
||||
* @property-read Model|\Eloquent $relationMorphTo
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|Simple[] $relationMorphedByMany
|
||||
* @property-read int|null $relation_morphed_by_many_count
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|Simple[] $relationSampleRelationType
|
||||
* @property-read int|null $relation_sample_relation_type_count
|
||||
* @property-read Simple $relationSampleToManyRelationType
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Simple query()
|
||||
@@ -46,6 +50,8 @@ use Illuminate\Database\Eloquent\Relations\MorphToMany;
|
||||
*/
|
||||
class Simple extends Model
|
||||
{
|
||||
use HasTestRelations;
|
||||
|
||||
// Regular relations
|
||||
public function relationHasMany(): HasMany
|
||||
{
|
||||
@@ -113,4 +119,14 @@ class Simple extends Model
|
||||
{
|
||||
return $this->belongsTo(AnotherModel::class, __FUNCTION__);
|
||||
}
|
||||
|
||||
public function relationSampleToManyRelationType()
|
||||
{
|
||||
return $this->testToOneRelation(Simple::class);
|
||||
}
|
||||
|
||||
public function relationSampleRelationType()
|
||||
{
|
||||
return $this->testToManyRelation(Simple::class);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user