2015-04-28 2 views
6

У меня есть предмет таблицы, содержащейСрывать несколько строк из таблицы в Laravel 4

id name 

и языки таблицы, содержащей

id subject_id 

и деление таблица

id name 

наконец субъектно таблица разделения (сводная таблица)

id subject_id division_id 

теперь существуют взаимно-однозначные отношения между таблицей предметных таблиц и языками и отношением «многие-ко-многим» между таблицей предметов и таблицей деления, мне нужно вырвать только темы темы таблицы без языков, используя функцию отношений

теперь я могу получить только язык предметной таблицы функции отношения В Division модели как следующий

public function langSubject() 
{ 
    return $this->belongsToMany('Subject' , 'subject_division','division_id','subject_id') 
       ->join('lang_subject', 'lang_subject.subject_id' ,'=', 'subject.id')->get(); 

} 

Но до сих пор я не могу получить предметы только без языков

Любые предложения?

+1

Ваш вопрос довольно неясен. Вы должны быть более конкретными относительно того, к какой модели вы пытаетесь получить доступ к предметам (без родственного языка). Если я правильно читаю ваш вопрос: вы пытаетесь найти темы, для которых не существует никаких отношений. Это не то, для чего должна использоваться функция отношений, поскольку вы буквально пытаетесь решить противоположную проблему, для которой она была разработана. –

+1

во-первых, спасибо, сэр Джим за комментарий, посмотрите, у меня есть одна таблица, в которой есть все предметы, такие как (английский, математика, немецкий, наука ....) Темы принадлежат к следующим разделам в subject_division (моя сводная таблица) а также существует таблица называется lang_table эта таблица имеет взаимно-однозначное отношение с таблицей предметов, что означает, что эта таблица будет переноситься Языки только как (английский, немецкий) Теперь мне нужно выщипывать (математику, науку) только из таблицы предметов без (английский, немецкий). –

+0

Возможно, вы можете использовать whereIn и whereNotIn с подзапросом (http://stackoverflow.com/questions/16815551/how-to-do-this-in-laravel-subquery-where-in). Таким образом, такой запрос, как SELECT * FROM, разделяет внутреннее соединение на ... где subject.id не в (SELECT subject_id из языков) – Rickkwa

ответ

0

Вам необходимо добавить предложение -> select ('tableName1.fieldName1', 'tableName2.fieldName2', 'tableName3.fieldName3') в ваш оператор после инструкции join, чтобы получить имя_имя.имя поля, и вам может понадобиться используйте leftJoin вместо соединения, чтобы получить результаты, если есть совпадение или нет.

0

Отъезд Eloquent relationship documentation -> подзаголовок «Запрос о существовании отношений». Там он упоминает :: есть метод, который вы могли бы использовать в моде

Division::has('subject.lang', '<', 1)->get()

Или, по крайней мере, в теории. У него еще не было необходимости ;-)

Он также должен поддерживаться Laravel 4.

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