雄辩的关系如下:
"存储"属于许多"存储时间" (属于很多人)
数据透视表(store_day_time_stores)有一个名为" user_id"的密钥,storedaytimes表有一个名为" date"的字段。
我想过滤"存储时间"基于给定的" user_id(来自数据透视表)"和"开始"和"结束" date(来自storedaytime表)。
我当前的查询是
$storedaytime->stores()
->wherePivot('user_id','=',$user)
->orderBy('date')
->where('date','>=',$start)
->where('date','<=',$end)->get();
它产生了一个非常可怕的查询,但它无效:
SQLSTATE [42S22]:未找到列:1054未知列&#39;日期&#39;在 &#39; where where&#39; (SQL:选择
stores
。*,order_day_time_store
。order_day_time_id
为pivot_order_day_time_id
,order_day_time_store
。store_id
为pivot_store_id
,order_day_time_store
。user_id
为pivot_user_id
, 来自order_day_time_store
内部联接的id
。pivot_id
为stores
order_day_time_store
上的stores
。id
=order_day_time_store
。store_id
其中order_day_time_store
。order_day_time_id
为空order_day_time_store
。user_id
= 4和date
&gt; = 2017-05-01 12:00:00 和date
&lt; = 2017-05-31 12:00:00按date
asc)订购
请帮助。谢谢你:3
答案 0 :(得分:0)
尝试以下方法:
$storedaytime->stores()
->wherePivot('user_id','=',$user)
->whereBetween('storedaytimes.date', [$start, $end])
->orderBy('storedaytimes.date')
->get();
除非您必须事先订购日期,否则建议order by子句位于SQL语句的末尾。在你的情况下没有理由这样做,所以把它放在最后。
答案 1 :(得分:0)
弄清楚自己:以下查询有效:
$storedaytime ->where('date','>=',$start)
->where('date','<=',$end)
->whereHas('stores',function($q) use($user){
$q->where('user_id',$user);})
->get();