ΠΠ°ΡΡΠ΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Eloquent ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ
ΠΠ°ΠΊΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π² ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π»ΡΡ . Π―Π·ΡΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΡΡΡΡΠΊΠΈΠΉ ΡΠΌΡΡΠ»Π΅Π½Π½ΠΎ. ΠΠ²ΡΠΎΡ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ Π² ΠΏΡΠΎΠ΄Π΅.
Relation Parser ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Π°ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡΠΌ Π² Π²Π°ΡΠΈΡ Eloquent ΠΌΠΎΠ΄Π΅Π»ΡΡ .
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΠΏΡΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ.
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
composer require omgitslock/relation-parser
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ Post
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function comments()
{
return $this->hasMany('App\Comment');
}
public function user()
{
return $this->belongsTo('App\User');
}
}
Π’ΠΎΠ³Π΄Π° Π³Π΄Π΅-ΡΠΎ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
use Omgitslock\RelationParser\Parser;
$parser = new Parser();
$relationBag = $parser->parse(new Post); //instanceof Omgitslock\RelationParser\Entities\RelationBag
$relationBag->getRelationNamesList(); //return ['user', 'comments'];
Π’Π°ΠΊΠΆΠ΅ RelationBag ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ΅Π±Π΅ ΠΌΠ°ΡΡΠΈΠ² Relation, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΌΠ΅ΡΠ°ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ
$relations = $relationBag->getRelations();
//ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΈΠΌΡ ΠΈ Π²ΠΈΠ΄ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ
foreach($relations as $relation){
echo 'ΠΠ΅ΡΠΎΠ΄ ' . $relation->getMethod(). ', ΡΠΈΠΏ ' . $relation->getType() . PHP_EOL;
}
Π’ΠΎΠ³Π΄Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅
ΠΠ΅ΡΠΎΠ΄ user, ΡΠΈΠΏ HasMany
ΠΠ΅ΡΠΎΠ΄ comments, ΡΠΈΠΏ BelongsTo