仅当关系查询计数大于0时才出现获取数据的问题。
这是我的客户模式与关系
Supplied AttributeValue is empty, must contain exactly one of the supported datatypes
这是合约
的模型class Customer extends Model
{
protected $table = 'customers';
public function contracts()
{
return $this->hasMany('App\Contract');
}
最后,我只需要与他们签订合同的客户
class Contract extends Model
{
public function customer()
{
return $this->belongsTo('App\Customer');
}
}
但我有所有客户。它看起来像这样:
$customers = Customer::with(['contracts' => function($query)
{
$query->where('data_end','>=','2017-07-01')
->where('data_end','<=','2017-07-31')
->where('typ','=','U') ;
}
])->paginate(10);
在这个例子中,我不需要客户1,2和5.我怎么能用热切的加载和最终关系对象来做。
这种情况发生了,我不需要在屏幕截图上使用X的客户 - 我的意思是,我不需要客户从0那里查询合同
- 来自dd()的对象 -
此查询结束 2个客户,1个有2个合同,2个有0个合同
"Customer 1"
"Customer 2"
"Customer 3"
*"Contract 1"
*"Contract 2"
*"Contract 3"
"Customer 4"
*"Contract 1"
*"Contract 2"
*"Contract 3"
"Customer 4"
答案 0 :(得分:0)
您的代码几乎就在那里。
你没有指定你正在使用哪个版本的Laravel,但是你应该看看whereHas(至少从5.0开始存在于Laravel中)
https://laravel.com/docs/5.0/eloquent#querying-relations(v5.0)
访问模型的记录时,您可能希望根据关系的存在来限制结果。例如,您希望提取至少包含一条评论的所有博文。为此,您可以使用has方法:
如果你需要更多的力量,你可以使用whereHas和orWhereHas方法来放置&#34;其中&#34;你的条件有疑问:
请尝试以下代码。
$customers = Customer::with('contracts')->whereHas('contracts', function($query)
{
$query->where('data_end','>=','2017-07-01')
->where('data_end','<=','2017-07-31')
->where('typ','=','U') ;
}
)->paginate(10);
这将向客户加载合同对象,但仅返回与查询匹配的合同的客户。