Laravel 4自动在BaseModel中创建关系 - 使用“with”-array或scopes或者什么?

时间:2014-07-05 11:24:33

标签: php laravel model eager-loading

我已成功在模型中创建了一些关系。这是用户模型

<?php 
  class User extends BaseModel{ 
    protected $table = 'users';

    public function group(){
        return $this -> belongsTo('UserGroup');
    }

    ...
  } 
?>

这是UserGroup-model(UserGroup.php)

<?php class UserGroup extends BaseModel{ ... } ?>

每个用户都可以在一个组中(database-column在users-table中称为'group_id')。如果我想对这种关系进行热切加载,那么对于其他模型来说,它的效果非常好。

问题是我有一些拥有大量外键的模型,我不想手动创建所有关系。我想在BaseModel中创建一个自动创建所有关系的函数,比如

public function group(){
    return $this->belongsTo('Group');
}

基于我将在每个模型中提供的数组,看起来像这样

protected $foreignKeys = array(array('key' => 'group', 'model' => 'UserGroup'), ...);

我已经读过你可以使用一个名为'with'的数组,但它对我不起作用。我读到的其他地方我应该使用查询范围,但我不知道这对我有什么帮助。

感谢阅读和支持!

最好的问候,Marcel

1 个答案:

答案 0 :(得分:0)

Ardent提供了类似于您想要实施的内容:https://github.com/laravelbook/ardent/blob/master/src/LaravelBook/Ardent/Ardent.php#L347-L350

根据评论:

您最终可能会找到更适合您情况的类似Ardent的解决方案。将数组中的所有关系呈现为将它们定义为方法的更多优势 - 如果需要,可以搜索这些数组等。所以这可能是你的选择