查询Laravel5中与条件的关系?

时间:2015-03-07 16:29:49

标签: php mysql laravel orm laravel-5

我有两个表,一个是客户端,第二个是client_contacts。我希望列出所有与一个主要联系人的联系人,可以通过检查client_contacts页面中的is_primary字段来识别。我也希望以对象形式进行响应。 我的控制器,

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

我的客户模式

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

在我的客户联系人模型中

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

它返回每个客户端的所有联系人,如何在此处输入条件并将结果作为对象返回?

1 个答案:

答案 0 :(得分:3)

您可以在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方法。