Laravel eloquent 如何动态创建关系?
Posted
技术标签:
【中文标题】Laravel eloquent 如何动态创建关系?【英文标题】:Laravel eloquent how to dynamically create relations? 【发布时间】:2020-09-14 12:35:59 【问题描述】:我需要使用不同的表和外键为我的模型动态创建不同的关系(oneToOne、manyToMany、oneToMany),然后使用所有这些关系检索我的模型。有什么办法吗?例如,不要做这样的事情:
public function relOne()
return $this->hasMany('one', 'foreign_one', 'one');
public function relTwo()
return $this->hasMany('two', 'foreign_two', 'two');
我需要这样做:
$model->createRelation('relOne', function ($model)
return $model->hasMany('one', 'foreign_one', 'one');
);
$model->createRelation('relTwo', function ($model)
return $model->hasMany('two', 'foreign_two', 'two');
);
附:我有 Laravel 6.X
【问题讨论】:
欢迎来到 SO ... 你看到了吗? laravel.com/docs/7.x/… ... 还是您只想为单个实例执行此操作? @lagbox 感谢您的回复!这些必须特定于单个实例 这能回答你的问题吗? Laravel - Eloquent - Dynamically defined relationship 【参考方案1】:我推荐使用 eloquent-dynamic-relation
你可以安装它:
composer require i-rocky/eloquent-dynamic-relation
在你的模型中使用特征:
use Rocky\Eloquent\HasDynamicRelation;
class MyModel extends Model
use HasDynamicRelation;
那么你可以简单地写:
MyModel::addDynamicRelation('some_relation', function (MyModel $myModel)
return $myModel->hasMany(SomeRelatedModel::class);
);
【讨论】:
您好,感谢您的帮助。不幸的是,我的模型是完全动态的,所以它甚至没有预设表(我创建实例并在实例中设置表与所有字段等使用织物),所以这个特征对我不起作用,因为它可以t 查找表并引发错误。以上是关于Laravel eloquent 如何动态创建关系?的主要内容,如果未能解决你的问题,请参考以下文章