Это мой первый проект Laravel, так что, возможно, я что-то неправильно понимаю.
У меня есть Clients
и Campaigns
контроллеры, и клиенты настроены с hasMany
кампаниями
class Client extends Model
{
public function campaigns(){
return $this->hasMany('App\Campaign');
}
}
в методе Clients Show, этот запрос не работает:
$client = Client::find($id);
$campaigns = $client->campaigns
->where(function($query) use($startdate, $enddate) {
$query->wherebetween('start_date', [$startdate, $enddate])
->orwherebetween('end_date', [$startdate, $enddate]);
})
->sortBy('start_date')
->groupBy(function($val) {
return Carbon::parse($val->start_date)->format('F Y');
});
Я получаю сообщение об ошибке: explode() expects parameter 2 to be string, object given
На странице ошибки отображается красная линия на })
после предложения orwhereBetween
.
Но этот запрос работает:
$campaigns = DB::table('campaigns')
->where('client_id', $client->id)
->where(function($query) use($startdate, $enddate) {
$query->wherebetween('start_date', [$startdate, $enddate])
->orwherebetween('end_date', [$startdate, $enddate]);
})
->orderBy('start_date')
->get()
->groupBy(function($val) {
return Carbon::parse($val->start_date)->format('F Y');
});
Моя проблема в том, что второй запрос не позволяет мне получить доступ к $campaign->tasks
, когда я нахожусь в представлении представления, которое мне нужно.
Итак, кто-нибудь знает, почему предложение where может вызвать проблемы при доступе к $client->campaigns
, но не при использовании DB
?