繁体   English   中英

Laravel Eloquent ORM关系命名约定

[英]Laravel Eloquent ORM relationship naming conventions

在Eloquent中定义反向关系时,是否必须将动态属性命名为与相关模型相同?

class Book extends Eloquent {

    public function author()
    {
        return $this->belongsTo('Author');
    }

}

$books = Book::all()
foreach ($books as $book) {
    echo $book->author->firstname;
}

在上面的示例中,我是否必须调用此方法作者,还是可以将其命名为其他内容? 我试图将其命名为其他东西(只是出于好奇),但它然后返回null,因此错误“试图获取非对象的属性”。

编辑:我通过将外键传递给belongsTo来实现它,如下所示:

class Book扩展了Eloquent {

    public function daauthor()
    {
        return $this->belongsTo('Author', 'author_id');
    }

}

$book = Book::find(55);
dd($book->daauthor);

有人可以解释原因吗?

方法belongsTo尝试确定链接到Author模型的属性。 为实现此目的,Laravel使用调用者的函数名称。

因此,在您的代码中,Laravel会看到daauthor函数并尝试使用books表中的属性daauthor_id来完全满足您的请求。 由于您的图书表没有此属性,因此失败。

通过在方法上设置$ foreignKey,您可以覆盖默认行为:

public function daauthor()
{
    return $this->belongsTo('Author', 'author_id');
}

有关更多详细信息,请查看\\ Illuminate \\ Database \\ Eloquent \\ Model的源代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM