Ларавель, красноречивый и Кислик сортируют соединившиеся столы?
Я опять застрял. На этот раз с сортировкой ссылок для 3-х объединенных таблиц. Я строю свой запрос следующим образом:
...
$query= Interaction::where('interactions.user_id', $id)->where('interactions.active', '1');
$query->join('contacts','interactions.contact_id','=','contacts.id');
$query->join('products','interactions.product_id','=','products.id');
$contact_username = request('contact_username');
$contact_name = request('contact_name');
$contact_type = request('contact_type');
$product_name = request('product_name');
$platform = request('platform');
$dateMode = request('dateMode');
$date = request('date');
$completed_at = request('completed_at');
$notesMode = request('notesMode');
$notes = request('notes');
//settings up some filters based on the request:
if ($contact_username) $query->whereJsonContains('contacts.username', $contact_username);
if ($contact_name) $query->where('contacts.name', $contact_name);
if ($contact_type) $query->where('contacts.type', $contact_type);
if ($product_name) $query->where('products.name', $product_name);
if ($platform) $query->where('interactions.platform', $platform);
if ($notes && $notesMode=='+') $query->where('interactions.notes', 'like', "%".$notes."%");
if ($notes && $notesMode=='-') $query->where('interactions.notes', 'not like', "%".$notes."%");
if ($date && $dateMode) $query->whereDate('date', $dateMode, $date);
if ($completed_at && $dateMode) $query->whereDate('completed_at', $dateMode, $completed_at);
//and finally:
$interactions = $query->sortable()->paginate(20,['interactions.*','contacts.username','contacts.name','contacts.type','products.name']);
...
Тогда на мой взгляд у меня есть:
<th>@sortablelink('contact.username','Username')</th>
<th>Platform</th>
<th>Type</th>
<th>@sortablelink('contact.name','Name')</th>
<th>@sortablelink('product.name','Product')</th>
<th>@sortablelink('date','Date')</th>
<th>@sortablelink('notes','Notes')</th>
Последние 2 ссылки работают отлично, и все сортируется так, как должно быть, потому что они из таблицы "взаимодействия", но ссылки, которые должны сортироваться по столбцам из Объединенных таблиц "продукты" и "контакты", не работают.
Как правильно ссылаться на эти столбцы в @sortablelink, когда они поступают из Объединенных таблиц?
PS: у меня есть два других представления, которые прекрасно работают, когда используются только таблицы "продукты" и "контакты", и сортировка для каждого столбца в этих таблицах работает нормально, поэтому я знаю, что модели настроены правильно.



Ответы - Ларавель, красноречивый и Кислик сортируют соединившиеся столы? / Laravel, Eloquent and Kyslik sorting joined tables?

08.01.2020 01:11:24
Решение оказалось довольно простым, но мне пришлось поспать над этой проблемой и снова взяться за нее утром. :) Вместо того, чтобы соединить два других стола вручную, я сделал это так:
$query= Interaction::where('interactions.user_id', $id)->where('interactions.active', '1')->with(['contact','product']);
//the two JOIN rows that were here were dropped. Everything else stayed the same.
и я добавил отношения в свою модель "взаимодействия" вот так:
public function product() { return $this->belongsTo(Product::class); }
public function contact() { return $this->belongsTo(Contact::class); }
Я надеюсь, что это будет кому-то полезно. Я потерял много часов, пытаясь понять это прошлой ночью.