Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel雄辩地讲述了如何动态创建关系?_Php_Laravel_Eloquent - Fatal编程技术网

Php Laravel雄辩地讲述了如何动态创建关系?

Php Laravel雄辩地讲述了如何动态创建关系?,php,laravel,eloquent,Php,Laravel,Eloquent,我需要使用不同的表和外键为我的模型动态创建不同的关系(oneToOne、manyToMany、oneToMany),然后使用所有这些关系检索我的模型。有什么办法吗?例如,不要这样做: 公共函数relOne() { return$this->hasMany('one','foreign_one','one'); } 公共职能(二) { return$this->hasMany('two','foreign_two','two'); } 我需要这样做: $model->createRelation

我需要使用不同的表和外键为我的模型动态创建不同的关系(oneToOne、manyToMany、oneToMany),然后使用所有这些关系检索我的模型。有什么办法吗?例如,不要这样做:

公共函数relOne()
{
return$this->hasMany('one','foreign_one','one');
}
公共职能(二)
{
return$this->hasMany('two','foreign_two','two');
}
我需要这样做:

$model->createRelation('relOne',函数($model){
return$model->hasMany('one','foreign_one','one');
});
$model->createRelation('relTwo',函数($model){
return$model->hasMany('two','foreign_two','two');
});
另外,我推荐使用Laravel 6.X

您可以安装它:

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);
});

欢迎来到苏。。。你看到这个了吗。。。还是你只想为一个实例做这件事?@lagbox谢谢你的回复!这些必须是特定于单个实例的。这是否回答了您的问题?嗨,谢谢你的帮助。不幸的是,我的模型是完全动态的,所以它甚至没有预设的表(我使用fabric创建实例并在实例中设置表以及所有字段等),所以这个特性对我不起作用,因为它找不到表并抛出错误。