2016-06-06 3 views
0

FIXEDLaravel красноречивые прибудет таблица 1 на основе поиска таблицы 2

Таким образом, после многих ответов на этот вопрос я, наконец, получил мой вопрос продумана и ответил, но она по-прежнему оставляет мне интересно, почему красноречивый не может справиться вопрос о

A-> B-> C

Дан объект доступа всех элементов B на основе значения в C (имя = скрипт)

следующими работ раствора и из-за Laravel имеетОбласти обеспечивают чистоту, но я чувствую, что должно быть проще и быстрее.

public function scopeType($query, $type) 
    { 

     return $query->join('article_image_types', 'article_image_types.id', '=', 'article_images.article_image_type_id')->where('name', $type); 
    } 

если у вас есть две таблицы изображения и image_type, и я хочу, чтобы найти все изображения с определенным типом, что бы это выглядело в красноречив?

Скажем, у вас есть тип «сценарий» с идентификатором «1» Я знаю, что я могу сделать, из коллекции

where('image_type_id', '1') 

изображения, но как бы я это сделать так, ниже работал

where('name', 'script')

ЦЕЛЬ:

Я хочу, чтобы иметь возможность доступа к этим данным легко из файла лезвия так что-то вроде ниже, используя сферу

<input type="text" name="['image']['script']" value="{!! $article->articleimage()->type('script') !!}"> 

или даже лучше доступа изображения в зависимости от типа через форму модели связывания [ «образ»] [ «сценарий»]

Так это работает

foreach($article->articleImages->all() as $item) { 
      dd($item->articleimagetype->name); 
     } 

и возвращает «сценарий»

Но как получить только тот, который говорит "сценарий"

:: UPDATE ::

Так мне настроить масштаб, но, как я ожидал, что проблема, которую я пытаюсь сделать это на основе вторичных таблиц называют так

$query->where('name', $type); 

ваше решение будет работать, если я хотел бы сделать

$query->where('image_type_id', 1); 

SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'name' в 'where clause' (SQL: select * from где . article_id = 32 и .article_id не утративший name = сценарий)

UPDATE

Так делает ниже производит то, что я хочу, кроме того что я не вернусь именем типа и я не могу показаться, чтобы получить его назад с имеет ('articleimagetype') или имеет ('') articleimages.articleimagetype

$article->articleImages()->whereHas('articleimagetype', function($query){ 
      $query->where('name', 'script'); 
     })->has('articleimagetype')->get(); 
+0

Я не вижу здесь вопроса – swatkins

+0

Я не могу заставить его вернуть только тот, у которого есть имя типа imagetype «script», он вернет все три, но даст тип null для тех, У меня есть скрипт, когда я запускаю только что добавленный скрипт. –

ответ

1

Просто использовать присоединиться:

\DB::table('image') 
    ->join('image_type','image_type.id','=', 'image.image_type_id') 
    ->where('image_type.name','=','script') 
    ->get(); 

EDIT:

после вашего обновления GOAL, я вижу, что вы хотите. У Laravel есть функция с именем query scope, которая позволит вам легко находить данные так, как вы пытаетесь.

В вашей Articleimage модели, создать область:

public function scopeType($query, $type) 
{ 
    return $query->join('article_image_type','article_image_type.id','article_image.type_id') 
       ->where('type', $type); 
} 

Тогда вы можете сделать $article->articleimage()->type('script').

+0

Я добавил (а) гол в это, пожалуйста, см. Выше –

+0

В заявлении будут отображаться только изображения, у которых есть image_type = 'script'. Попробуй. Если ваш результат отличается, нам нужна дополнительная информация, потому что ваша проблема может отличаться от вашего запроса. –

+0

проблема заключается в том, что я не понимаю основ красноречия и доступа к данным изображения на основе связанного с ним значения типа. Какую информацию вы бы хотели, и я ее предоставлю. –

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