Как создать условные отношения в Laravel eloquent в столбце с разделителями-запятыми - PullRequest
0 голосов
/ 11 января 2019

У меня 4 таблицы vendors, project, project_quotas и project_vendors

Структура таблицы:

vendors: id (Primary), name, email

project: id (Primary), name, status

project_quotas: quota_id (Primary), project_id (Foreign Key), quota_name, description

project_vendors: pv_id (Primary), project_id(Foreign Key), vendor_id, spec_quota_ids(comma separated, Foreign Keys), description

Скажем за project_id = 1

Я хочу получить Все квоты проектов и их продавцов


Вот необработанный запрос, который я создал, чтобы получить эти данные:

SELECT
    pq.id as pq_id, pq.project_id as project_id, pq.name as pq_name, pv.id as pv_id, pv.vendor_id as pv_vendor_id, pv.spec_quota_ids as quotas
FROM `project_quotas` pq
LEFT JOIN
    project_vendors pv ON pv.project_id = 1 AND find_in_set(pq.id, spec_quota_ids) > 0
WHERE pq.project_id = 1
GROUP BY pv.vendor_id, find_in_set(pq.id, spec_quota_ids)
Order BY pq.id

Вот вывод Output from this SQL Query

Единственная проблема заключается в том, что я хочу, чтобы этот запрос выполнялся Eloquent. У меня есть ProjectQuota, ProjectVendors Model Я хочу что-то вроде

$data = ProjectQuota::where('project_id', '=', '1')->with('projectVendors', 'projectVendors.Source')->get();

Я не знаю, как я могу создать условные hasMany отношения в красноречивом, буду благодарен за помощь.

1 Ответ

0 голосов
/ 11 января 2019

Я это способ сделать это.

if($this->project_id===2) {
    return $this->belongsTo(Foo::class);
}

if($this->project_id===3) {
    return $this->belongsTo(Bar::class);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...