【问题标题】:Laravel dynamic property not workingLaravel 动态属性不起作用
【发布时间】:2013-09-14 09:42:49
【问题描述】:

我在 Laravel 中使用具有 hasMany 关系的 eloquent ORM。

当我跑步时:

Level::find(1)->lessons()->get();

它工作正常,但是当我像这样使用动态属性时:

Level::find(1)->lessons

它只返回 level 而不是 lessons 的结果。

我需要在某个地方进行其他设置吗?

编辑:以下是模型:

class Level extends Eloquent {

    protected $table = 'levels';

    public function lessons()
    {
        return $this->hasMany('Lesson');
    }
}

class Lesson extends Eloquent {

    protected $table = 'lessons';

    public function level()
    {
        return $this->belongsTo('Level');
    }
}

【问题讨论】:

  • 添加了模型,没什么特别的,只是按照文档进行操作,不确定我是否缺少其他一些参数或设置以使其正常工作。
  • 这很奇怪,一切都是正确的。
  • 是的,我真的没有在这里做任何特别的事情,get() 电话工作得很好。它不返回任何错误,什么也没有,它只是不运行。如果我回显最后一个查询,它将显示用于获取该级别的 level 而不是 lessons 的查询。

标签: php orm laravel eloquent dynamic-properties


【解决方案1】:

我刚刚遇到了同样的问题,结果我在表格中有一个列与我设置的关系同名。

确保模型中没有与您尝试加载的关系方法同名的列。

编辑:我还注意到 laravel 在关系名称中存在取消标记 (_) 的问题,因此不要在方法名称中添加 _,否则它将不起作用。

【讨论】:

  • 应该标记为正确。经过测试,这是真的,至少在 Laravel 4 中
  • 这在 5.2 中成立;列名将覆盖动态属性。
  • 我也有同样的问题。就我而言,author 没有用。在我将其更改为creator 之后,关系起作用了。
【解决方案2】:

您需要预先加载关系。

Level::with('lessons')->find(1)->lessons; 应该可以工作。

如果你想每次都加载这个关系,你应该把这行添加到Level模型中。

protected $with = array('lessons');

【讨论】:

    猜你喜欢
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2018-08-28
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多