我有两张桌子:
Cards
Notes
每张卡都有多个注释。所以他们之间有这样的关系:
class Card extends Model {
public function notes ()
{
return $this->hasMany(Note::class);
}
}
好吧,好吧。
现在我需要理解这两行的概念:
$card()->$notes()->first();
和
$card()->$notes->first();
他们之间有什么区别?正如您在第一个$note()
中看到的那样,$note
是一个函数,而在第二个card
中,notes
不是函数。它们将如何在PHP中翻译?
第一个指向int block_id_0 = jObj.optInt("block_id");
表,第二个指向ternary
表,对吧?或者是什么?无论如何,我一直坚持理解tham的概念。
答案 0 :(得分:3)
我不知道您的代码中的$
之前的$notes
,但是如果您想说这样的话。
1- $card->notes()->first();
2- $card->notes->first();
在第1行的代码中,首先您拥有$card
模型,然后您想要访问与该notes()
相关的所有$card
,并且因为添加了()
在notes
之后,您只需在注释上调用query builder
,表明您可以在此之后执行任何其他数据库查询功能,例如where, orderBy, groupBy, ...
和数据库上的任何其他复杂查询。
但是在第二个实际上您可以访问与collection
相关的$card
个注释,我们可以说您从数据库获取所有相关注释并设置它进入了laravel集合,你不再能够在notes
上执行数据库查询。
注意:因为laravel集合有一些像
where(), groupBy(), whereIn(), sort(), ...
这样的方法你可以在第二个上使用它们,但是在这种情况下你在集合而不是数据库上执行这些方法,{{1 }}