У меня есть 3 модели: PurchaseOrders, PurchaseOrderItems и Vendors. PurchaseOrders может иметь много связанных с BuyOrderItems каждого из них, и каждый PurchaseOrderItem может иметь с ним один Связанный с Продавцом. Моя дилемма заключается в том, что мне нужно не только показать поставщиков в PurchaseOrder GridView, но и сделать этот столбец, который можно фильтровать и сортировать. Я выяснил запрос MySQL, чтобы получить Продавцов, связанных с PurchaseOrder, но я не могу связать все это вместе с Yii2.Yii2 - Сортировка и фильтрация по одному-многим отношениям в GridView
Запрос:
SELECT pos.id, pos.notes, group_concat(distinct(vend.name) order by vend.name ASC SEPARATOR ', ') as vendorNames
FROM purchase_orders as pos
JOIN purchase_order_items as PO_item
ON pos.id = PO_item.purchase_order_id
JOIN vendors as vend
ON PO_item.vendor_id = vend.id group by pos.id
PurchaseOrder Модель:
class PurchaseOrders extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'intra_purchase_orders';
}
public function getPurchaseOrderItems() {
return $this->hasMany(PurchaseOrderItems::className(['purchase_order_id' => 'id']);
}
}
PurchaseOrderItems Модель:
class PurchaseOrderItems extends \yii\db\ActiveRecord
{
public function getVendor()
{
return $this->hasOne(Vendors::className(), ['id' => 'vendor_id']);
}
}
Вендоры Модель:
class Vendors extends \yii\db\ActiveRecord
{
public function getPurchaseOrderItems()
{
return $this->hasMany(PurchaseOrderItems::className(), ['vendor_id' => 'id']);
}
}
Есть ли способ связать BuyOrders с поставщиками, чтобы я мог показать связанных с ним поставщиков, как я делаю в MySQL-запросе?
Редактировать Забыл добавить к первоначальному вопросу, я создал функцию в рамках модели PurchaseOrder в список поставщиков, однако; они не сортируются в GridView таким образом.
public function getVendors() {
$vendor_arry = [];
foreach ($this->purchaseOrderItems as $key => $item) {
array_push($vendor_arry, $item->vendor->name);
}
sort($vendor_arry);
return implode(array_unique($vendor_arry, SORT_STRING), ", ");
}
может у пожалуйста, дайте скриншот того, как ваш вид сетки должен выглядеть с данными? –
Что мне нужно опубликовать в GridView, это все поля, относящиеся к PurchaseOrder + конкатенированному полю Продавца (то есть «Макдональдс, Burger King, Taco Bell»). –