1 решение. Если у каждого user
есть много ads
, а у ads
есть много keywords
, плохо добавить user_id and 'ad_id'
в keywords
таблицу, поскольку она должна иметь повторяющиеся ключевые слова,Правильный путь для не имеет дубликат записи, вы должны сделать 4 таблицы users, ads, keywords, ad_keyword
таблиц ad_keyword
является таблицей соединения.В этом случае ваш код должен быть похож на это
$userId = 1;
$ads = Ad::where('user_id', $userId)->get(['user_id]);
$adIds = $ads->pluck('user_id')->all();
$keywords = Ad::with('keywords')->whereIn('id', $adIds)->get();
2 решение. Вы должны составить 5 таблиц users, ads, keywords, ad_keyword, keyword_user
таблиц ad_keyword, 'keyword_user
- это таблица соединений, (но она не соответствуетнормализация базы данных, но полезно для большой базы данных).Для этого случая ваш код должен быть похож на этот
$userId = 1;
$keywords = User::with('keywords')->where('id', $user)->get();