【问题标题】:Laravel eloquent how to dynamically create relations?Laravel eloquent 如何动态创建关系?
【发布时间】: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

【问题讨论】:

标签: php laravel eloquent


【解决方案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 查找表并引发错误。
猜你喜欢
  • 2022-01-24
  • 2021-02-06
  • 2017-01-19
  • 2020-06-09
  • 2018-06-18
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 2017-08-03
相关资源
最近更新 更多