Получить уникальные значение через связь моделей Laravel
Мне нужно получить уникалные значения из таблицы Payment_types учитывая связи.
В проекте есть такие таблицы как:
1. Products [поля:id,name];
2. Pharmacies [поля:id,name];
3. Payment_types [поля:id,name];
4. Pharmacy_products[поля:id_pharmacy, id_product];
5. Pharmacy_payment_methods[поля:id_pharmacy,id_payment_type];
Так же есть модели:
class Product extends Model
{
public function pharmacy()
{
return $this->belongsToMany('App\Models\Pharmacy',
'pharmacy_products');
}
}
class Pharmacy extends Model
{
public function paymentMethods()
{
return $this->belongsToMany('App\Models\PaymentMethod',
'pharmacy_payment_methods');
}
}
Модели других таблиц так же существуют. В них лишь стандартный protected $fillable.
Как мне правильно получить уникальные имена видов оплат?
Я пробовал разные комбинации например:
$data['product'] = Product::find($id);
$payment_types = $data['product']->pharmacy->paymentMethods->distinct('name');
И разные другие вариации, но постоянно получаю разного рода ошибки, я подозреваю что есть элегатное и верное решение этой задачи.
Ответы (2 шт):
Если у вас правильно настроены связи используйте Nested Eager Loading
$product = Product::with('pharmacy.paymentMethods')->find($id);
ЭЛЕГАНТНОЕ решение заключается в том, чтобы сделать в базе данных предаставление (view) на SQL, такое как вы хотите. А уже из него получать те уникальные данные которые вам нужны стандартными методами.