У меня есть 3 миграции
Миграция пользователей по умолчанию, Миграция событий и Миграция общих ресурсов.
Schema::create('events', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('owner');
$table->dateTime('start_date');
$table->dateTime('end_date');
$table->dateTime('alert_date');
$table->string('title');
$table->text('description');
$table->string('local');
$table->timestamps();
$table->foreign('owner')->references('id')->on('users');
});
Schema::create('shares', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('host');
$table->unsignedInteger('guest');
$table->boolean('host_answer')->nullable();
$table->boolean('guest_answer')->nullable();;
$table->timestamps();
$table->foreign('host')->references('id')->on('users');
$table->foreign('guest')->references('id')->on('users');
});
Тогда у меня установлены отношения на соответствующих моделях.
Пользователи:
public function events()
{
return $this->hasMany(Event::class);
}
public function host()
{
return $this->hasMany(Share::class);
}
public function guest()
{
return $this->hasMany(Share::class);
}
Событие:
public function userOwner()
{
return $this->belongsTo(User::class, 'owner');
}
Поделиться:
public function userGuest()
{
return $this->belongsTo(User::class, 'guest');
}
Мне нужны все отдельные события, когда выполняется хотя бы одно из 3 условий:
1- events.owner = $ someUserId.
2- shares.host = $ someUserId и shares.guest_answer = 1.
3- shares.guest = $ someUserId и shares.guest_answer = 1.
Если бы это был просто SQL, я думаю, я мог бы сделать запрос ... но я не знаю, поэтому у меня возникли некоторые проблемы с моим запросом.
Эточто я получаю:
$events = Event::join('users', 'events.owner', '=', 'users.id')
->join('shares', 'users.id', '=', 'shares.host')
->where ([[ 'events.owner', $userId ]])
->orWhere([[ 'shares.host', $userId],
[ 'shares.guest_answer', '1' ]])
->orWhere([[ 'shares.guest', $userId],
[ 'shares.guest_answer', '1' ]])
->paginate(10);
Но этот запрос просто возвращает события, где events.owner = $ userId.
Большое спасибо за потраченное время.