2017-02-05 1 views
1

У меня есть две модели с One to Many полиморфным отношением как:Как получить одну запись от одного до нескольких полиморфных отношений в Laravel 5,4

class Address extends Model 
{ 
    public function addressable() 
    { 
     return $this->morphTo(); 
    } 
} 


class User extends Authenticatable 
{ 
    public function addresses() 
    { 
     return $this->morphMany('App\Address', 'addressable'); 
    } 
} 

В адресной модели есть столбец с именем is_primary и один пользователь может иметь только один первичный адрес. Теперь в форме обновления пользователя я хочу получить основной адрес только из адресной модели.

Я знаю, что могу вытащить все адреса и проверить, какой из них является основным адресом этого:

public function primaryAddress() 
{ 
    return $this->addresses()->where('is_primary',true)->first(); 
} 

Но проблема заключается в поле формы не получает значение, и я хочу, чтобы получить доступ к основному адресу например $user->address_line_1

Как я могу достичь этой цели?

+0

https://laravel-news.com/relationship-macros?utm_medium=email&utm_campaign=LN%20141%20-%20Laravel%20Eloquent%20Relationships%20Through%20Macros&utm_content=LN%20141%20-%20Laravel%20Eloquent%20Relationships%20Through% 20Macro s + CID_ac36a12801d2533197d91bc100eed131 & utm_source = email% 20marketing & utm_term = Читать% 20MOre –

ответ

0

Вы саз использовать аксессор для этого:

public function getPrimaryAddressAttribute() 
{ 
    return $this->addresses()->where('is_primary',true)->first(); 
} 

и теперь вы получите $ user-> primary_address

если вы хотите direcly доступа к линиям сделать что-то вроде:

public function getAddressLine1Attribute() 
{ 
    return $this->addresses()->where('is_primary',true)->first()->address_line_1; 
} 
+0

Спасибо, но адрес не является ни одним полем, есть строка_1, строка_2, состояние, почтовый индекс, страна и некоторые другие поля. –

+0

Посмотрите на ответное обновление –