2015-09-15 168 views
2

我想一個屬性在belongsTo關係添加到attach()方法,但它沒有影響:擴展attach()方法?

// User Model 
class User extends Eloquent { 
    public function roles(){ 
    return $this->belongsToMany(`App\Role`); 
    } 
} 

// Role Model 
class Role extends Eloquent { 
    public function users(){ 
    return $this->belongsToMany(`App\User`); 
    } 

    public function attach($id, array $attributes = [], $touch = true){ 
    $attributes['foo'] = 'bar'; 
    parent::attach($id, $attributes, $touch); 
    } 
} 

當我做$user->roles()->attach($id, ['key' => 'value']); - 的['key' => 'value']是有,但它不具備['foo' => 'bar'],我已經在擴展附加方法中設置了它(我相信它沒有被調用)。

+0

'attach()'是'BelongsToMany'關係上的方法,而不是'BelongsTo'或模型。你發佈的代碼應該拋出異常。另外,你已經標記了laravel-5,但是擴展'Eloquent'類看起來像laravel 4代碼。 – patricus

+0

attach是laravel中的一個內置方法,與許多關係一起使用,我不明白爲什麼你要創建這個函數 –

+0

我更新了代碼以使用'belongsToMany' - 我實際上使用多態關係(但是他們的類從'belongsToMany'擴展) - 我仍然在尋找擴展'attach()'方法的方法。 –

回答

0

首先,如果您使用的是多對多關係,則必須使用附加方法僅限

此處瞭解詳情:http://laravel.com/docs/5.1/eloquent-relationships#inserting-many-to-many-relationships

所以,你有兩種選擇:

  • 要在一個一對多關係的工作。在這種情況下,您必須擴展save()方法或saveMany方法。你將不得不在HasMany班上工作;

  • 你想工作在多對多的關係。在這種情況下,是的,你必須在附件()上工作,但是在BelongsToMany類中;

+1

感謝您的支持。我正在研究'morphsMany'(它擴展了'belongsToMany') - 我的問題是我在模型中聲明的'attach()'方法實際上並沒有被調用。 –

+0

因爲你不應該在模型中定義_attach_,但是你想在關係類中使用:) –

+0

啊是的 - 但我不想編輯供應商(類)文件;這是一個痛苦,然後保持最新 - 尤其是如果有安全更新等。 –