Создать индивидуальные отношения? - PullRequest
0 голосов
/ 15 февраля 2019

Модель user может иметь 0 или более foo и может иметь 0 или более bar.Вот диаграмма:

enter image description here

Существует следующее правило : если у пользователя есть какой-либо столбец, то это означает, что онимеет foo с id=1.Пользователь не может иметь foo с id=1 без бара.Чтобы предотвратить несогласованность базы данных, в foo_user никогда не вставляется строка с foo_id = 1, поскольку она уже подразумевается таблицей bar_user.

В Laravel я могу получить все foo изпользователь, подобный этому:

public foos()
{
    $this->belongsToMany('App\Foo');
}

Проблема в том, что из-за вышеупомянутого правила, foo с id = 1 может отсутствовать.Есть ли простой способ настроить мой метод отношений foos, чтобы он проверял, существует ли bar_user, а затем добавьте foo с помощью id=1?Я хотел бы получить правильные foos с одним запросом и со связями, поэтому я могу использовать это как \App\User::whereHas('foos', ...)


Это то, что я пытался

Запрос на получение всех foo

  \DB::table('foos')
          ->leftjoin('foo_user', 'foo.id', 'foo_user.foo_id')
          ->where('foo_user.user_id', '=', $this->id);
          ->orWhereRaw('EXISTS (select * from bar_user WHERE user_id = ?) AND foos.id = 1', [$this->id]);

Я не могу выполнить

public foos()
{
    $this->belongsToMany('App\Foo')
         ->orWhereRaw('EXISTS (select * from bar_user WHERE user_id = ?) AND foos.id = 1', [$this->id]); 
}

, потому что есть innerjoin в belongsToMany, а не leftjoin,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...