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 如何动态创建关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel 关系创建表?

Laravel - 如何在视图中创建(匿名)动态刀片组件

Laravel 动态下拉获取数据问题

如何在 laravel 中使用数据透视表中的 3 个关系创建关系?

Laravel 动态关系 - 在急切加载时访问模型属性

Laravel:模型中的动态关系