[英]Laravel 4 Relationships with name separated by undescore don't work
我有一個帶有這種命名關系的model
:
class PurchaseOrder extends Eloquent implements IModel
{
protected $guarded = ['id'];
protected $table = 'purchase_orders';
// this function has name separated by an _ or underscore
public function purchased_items()
{
return $this->hasMany('PurchasedItem');
}
}
我正在使用它來訪問它:
$posted_po = PurchaseOrder::find($po_id);
$purchased_items = $posted_po->purchased_items->all();
上面的代碼產生錯誤
PHP致命錯誤:在非對象上調用成員函數all()
但是以某種方式更改關系的名稱可以解決我的問題:
public function purchasedItems()
{
return $this->hasMany('PurchasedItem');
}
$posted_po = PurchaseOrder::find($po_id);
$purchased_items = $posted_po->purchasedItems->all();
現在,我的問題是,為什么會這樣? 這種行為背后有什么原因嗎?
Eloquent中的關系名稱應在camelCase中。 Laravel(大多數情況下)遵守PSR-1標准,該標准規定“方法名稱必須在camelCase
聲明”。 但是,如果將其下划線的關系稱為方法,則該關系將起作用,但如果將其稱為動態屬性而沒有尾部()
,則該關系將失敗。
發生這種情況的原因是,當您將關系作為屬性調用時, __get
的__get
方法檢查該屬性是否作為模型中的屬性或列存在。 由於不存在,因此它將名稱轉換為camelCase,然后檢查是否存在具有該名稱的方法。 因此,最終在模型中尋找方法purchasedItems
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.