Несколько связей между таблицами в Laravel 5.4 - PullRequest
0 голосов
/ 30 августа 2018

У меня есть 3 таблицы ( items , category_questions_mapping и category_questions ) в базе данных mysql, в которой у меня есть следующие столбцы:

таблица позиций имеет следующие столбцы:

item_id, uuid, radius, category_id

category_questions_mapping имеет следующие столбцы:

category_id, category_question_id

category_questions имеет следующие столбцы:

category_question_id, data


Я создал модель для таблицы items , которая является Items.php , в которой я создал следующий метод:

public function category_questions() {
            return $this->hasOne('App\CategoryQuestionsMapping','category_id','category_id');
        }

Вышеуказанный метод является в основном связью между category_id таблицы элементов и category_id таблицы category_question_mappings


Постановка задачи:

Мне интересно, какие изменения я должен внести в вышеупомянутый метод, чтобы я мог извлечь значение столбца данных из таблицы category_questions . Есть ли какая-нибудь связь, которую мы можем установить в вышеуказанном методе, чтобы он мог вытянуть столбец данных?

Вышеуказанный метод будет использоваться в контроллере для отображения.

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Вы не можете изменить только метод category_questions для решения проблемы. Но вы можете сделать 2 отношения в 2 моделях и запросить data через 2 отношения.

// App\Item
public function category_questions_mapping() {
    return $this->hasOne(CategoryQuestionsMapping::class, 'category_id', 'category_id');
}

// App\CategoryQuestionsMapping
public function category_question() {
    return $this->hasOne(CategoryQuestion::class, 'category_question_id', 'category_question_id');
}

// Somewhere else

// Get data:
$data = $item->category_questions_mapping->category_question->data;

// Find by data:
$items = \App\Item
    ::whereHas('category_questions_mapping.category_question', function ($query) {
        $query->where('data', 'foo');
    })
    ->get();
0 голосов
/ 30 августа 2018

Ваши отношения используются так:

public function category_questions()  {   
   return $this->belongsToMany('App\CategoryQuestions','category_questions_mapping','category_id', 'category_question_id);
}
0 голосов
/ 30 августа 2018

Чтобы получить доступ к столбцам таблицы category_question, вы также должны определить отношение в модели category_question_mapping, например:

public function category_questions() {
        return $this->hasOne('App\CategoryQuestions','category_question_id','category_question_id');
}

затем заполните нужное поле, например $items->category_questions_mapping->category_questions->data.

Кстати, я бы рекомендовал назвать первое отношение, которое вы показали, как category_questions_mapping (), так как оно связано с таблицей category_questions_mapping.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...