簡體   English   中英

Laravel 4名稱之間用undescore分隔的關系不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM