Laravel, где поисковый запрос - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть таблица Spaces и Interests.

В настоящее время я могу получить список идентификаторов Space, сохраненных как $ spaceList, но я хочу, чтобы моя переменная $ query получила список интересов, которые space_idвнешний ключ соответствует одному из space_id из моей переменной $ spaceList.

public function index() {

        $user_id = auth()->user()->id;
        $user = User::find($user_id);

        $spaceList = Space::where('user_id', $user_id)->pluck('space_id')->toArray();
        $query = Interest::where('space_id', $spaceList);

        $interests = $query->get(); 

        return view('dashboard')->with('space', $user->space)->with('interest', $interests);
}

Спасибо, я занимаюсь этим уже целую вечность.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2019

В Laravel Eloquent это то, что Запрос наличия отношений работает на

Вам не понадобится переменная $ spaceList, если она не используется в других местах

$query = Interest::whereHas('spaces', function($query) use ($user_id) {
    $query->where('user_id', '=', $user_id);
});

Обратите внимание, чтобы получить эту работу, вам нужно объявить пробелы отношение один-ко-многим в модуле интереса

Должно быть что-то вроде этого, более подробно см. Документ здесь

namespace App;

use Illuminate\Database\Eloquent\Model;

class Interest extends Model
{
    public function spaces()
    {
        // space_id is the column name in your space database table
        // id the the foreign-key target, generally is the primary-key of space table
        return $this->hasMany('App\Space', 'space_id', 'id');
    }
}
0 голосов
/ 21 апреля 2019

Вы должны использовать whereIn вместо where

$spaceList = Space::where('user_id', $user_id)->pluck('space_id')->toArray();
$query = Interest::whereIn('space_id', $spaceList);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...