#laravel-4 #eloquent
#laravel-4 #eloquent
Вопрос:
Привет, ребята, как у вас дела? Я пытаюсь просто найти по идентификатору и в то же время гарантировать, что столбец из таблицы отношений имеет значение. Я попробовал несколько вещей, но ничего не работает.
$tag = Tag::find($id)->whereHas('posts', function($q){
$q->where('status','=', 1);
})->get();
Также:
$tag = Tag::whereHas('posts', function($q) {
$q->where('status','=', 1);
})->where('id','=', $id)->get();
Можете ли вы мне помочь?
Это простая вещь, но я не могу это сделать…
Ответ №1:
Вам нужно прочитать в Eloquent
документах. Узнайте, что такое find
, first
get
если уж на то пошло.
Ваш код делает то, что вам нужно, и даже больше (хотя и немного неправильно) 😉
$tag = Tag::find($id) // here you fetched the Tag with $id
->whereHas('posts', function($q){ // now you start building another query
$q->where('status','=', 1);
})->get(); // here you fetch collection of Tag models that have related posts.status=1
Итак, это то, что вы хотите:
$tag = Tag::whereHas('posts', function($q){
$q->where('status','=', 1);
})->find($id);
Он вернет Tag
модель или null
, если нет строки, соответствующей этому where
предложению Или заданной $id
.
Комментарии:
1. Код не сработал… Верните null, и у меня будет тег… Это единственный способ, которым это работает: [код] $tag = Tag::find($id); $posts = Post::whereHas(‘теги’, функция($ q) использует ($ id) { $ q-> where(‘id’, ‘=’, $id); })-> where(‘статус’, ‘=’, ‘1’)-> get();
2. То, что вы вставили, — это совершенно другой запрос. Тот, который я вам дал, может возвращать значение null, как указано в ответе.
Ответ №2:
Вы проверили область запроса?
Вы можете сделать это:
$tag = Tag::where('status', '=', 1)
->where('id', '=', 1, $id)
->get();
Комментарии:
1. Поле статуса находится в модели Post… У них есть отношения «многие ко многим»… Я могу получать сообщения из определенного тега, но я хочу получать только сообщения со статусом = 1
2. если вам нужны только сообщения со статусом =1, почему бы вам не использовать
Post::where('status', '=', '1')
?3. Потому что мне нужны сообщения с определенным идентификатором тега
4. Есть ли у вас отношение «один ко многим» между
tag
иposts
?