2016-05-04 2 views
3

У меня есть много разных отношений между двумя объектами Tag и Post. Теперь я должен проверить Wich теги, что пост есть в списке CheckBox, как так:Получить идентификаторы из родственной модели laravel

//Load all possible tags in the controller 
//and send it to view 
$allTags = \App\Tag::all(); 
return view('post.edit')->with('allTags'); 

По мнению:

@foreach($allTags as $tag) 
    <input type="checkbox" name="tags[]" value="{{ $tag->id }}"/> 
    {{ $tag->description }} 
@endforeach 

Теперь, когда пользователь перезагружает страницу, я должен установите эти флажки.

Моего вопрос:

Это, конечно, работает, но кажется, что излишества мне

$relatedTags = []; 
foreach($post->tags as $tag){ 
    $relatedTags[]= $tag->id; 
} 

Есть ли способ, чтобы получить только идентификаторы без загрузки всех этих объектов?

Нечто вроде: $relatedTags = $post->tags()->ids?

ответ

2

Вы можете попробовать запрашивая результаты как то:

$relatedTagIds = $post->tags()->select('id')->get()->pluck('id')->toArray(); 

Вот как вы получите четкий список тегов идентификаторов.

+0

Perfect! Спасибо! – CarlosCarucce

2

Используйте это, чтобы получить только идентификатор и описание, которое вам нужно.

$allTags = DB::table('tags')->lists('description', 'id'); 
+0

хорошо, но в моем случае, мне нужно только почтовые теги. Не все из них – CarlosCarucce

+0

Что вы подразумеваете под тегами? –

+0

Я имел в виду только теги, которые относятся к сообщению – CarlosCarucce

0

Благодаря ответу Филиппа я нашел другое возможное решение.

$post->tags->pluck('id')->toArray(); 

Я надеюсь, что кто-то будет полезно

Смежные вопросы