Запрос отношения с условием в Laravel5?

У меня есть две таблицы, одна клиентская, а вторая client_contacts. Я хочу перечислить все контакты с одним основным контактом, который можно идентифицировать, проверив поле is_primary на странице client_contacts. Я также хочу получить ответ в форме объекта. Мой контроллер,

Client::with(array('contacts'))
                        ->findOrFail($id);

Моя клиентская модель

public function contacts() {
    return $this->hasMany('App\Model\ClientContact');
}

В моей модели контактов с клиентом

 public function clients() {
    return $this->belongsTo('App\Model\Client');
}

Он возвращает все контакты для каждого клиента, как я могу поставить здесь условие и вернуть результат как объект?


person gsk    schedule 07.03.2015    source источник


Ответы (1)


Вы можете объявить два дополнительных метода отношений в вашей модели Client, например:

use ...Model;

class Client extends Model {
   // Will return a collection of ClientContact object or null (many-to-many)
   public function nonPrimaryContacts()
   {
       // Assumed is_primary is a boolean field, use whereNull('is_primary') if null
       return $this->hasMany('App\Model\ClientContact')->where('is_primary', false);
   }
   // Will return a single ClientContact object or null (one-to-many)
   public function primaryContact()
   {
       return $this->hasOne('App\Model\ClientContact')->where('is_primary', true);
   }
}

Затем вы можете использовать что-то вроде этого:

Client::with(['primaryContact', 'nonPrimaryContacts'])->findOrFail($id);

Для всех контактов вы можете использовать свой метод contacts в модели Client.

person The Alpha    schedule 07.03.2015