За последние 24 часа нас посетили 21904 программиста и 987 роботов. Сейчас ищут 653 программиста ...

ОЧЕНЬ хитрая выборка из таблиц

Тема в разделе "Laravel", создана пользователем Exort, 10 мар 2019.

  1. Exort

    Exort Активный пользователь

    С нами с:
    30 апр 2016
    Сообщения:
    100
    Симпатии:
    2
    Доброго времени суток, за ранее спасибо за потраченное время.

    (За ранее: я знаю, что это можно и ручками через crossJoin сделать).

    В Laravel имеются такие системы: morphMany, morphMap, hasMany,
    hasManyThrough и тд, так вот, как при помощи использования одной из них реализовать следующую выборку:

    Имеется 3 таблицы: Articles, TextModules, TextModulesList.
    articles - id
    TextModules - id
    TextModulesList - article_id, module_id

    Необходимо заселектить все TextModules через TextModulesList по article_id

    Большое спасибо за ранее.
     
  2. MRSgiba

    MRSgiba Активный пользователь

    С нами с:
    22 дек 2017
    Сообщения:
    200
    Симпатии:
    32
    @Exort смотри в мануале Laravel отношения, там все подробно и доступно и на русском, и на английском с примерами, как создать модели, как создать методы в них, как создать миграции, кинуть ссылку на раздел в мануале???
     
  3. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
  4. Exort

    Exort Активный пользователь

    С нами с:
    30 апр 2016
    Сообщения:
    100
    Симпатии:
    2
    если по теме нечего сказать, не оффтопь в теме
    --- Добавлено ---
    у меня не получается, я смотрел это всё
     
  5. MRSgiba

    MRSgiba Активный пользователь

    С нами с:
    22 дек 2017
    Сообщения:
    200
    Симпатии:
    32
    @Exort что не получается? Создать две модели как по мануалу? и потом
    PHP:
    1. return Article::All()->with('TextModules');
    В свое время разбирался вот по этому мануалу http://www.itmathrepetitor.ru/laravel-5-5-shpargalka-po-otnosheniyam-v-eloquent/ Есть кой какие косяки но там сообразишь, делай как написано, что не получится или получится скажешь
    --- Добавлено ---
    @Exort Единственное что на мой взгляд сложное, в твоем вопросе, это найти в русском мануале этот абзац:

    Как уже упоминалось ранее, чтобы определить имя для таблицы присоединения отношений, Eloquent соединит два названия взаимосвязанных моделей в алфавитном порядке. Тем не менее, вы можете переопределить имя, передав второй параметр методу belongsToMany():

    PHP:
    1. return $this->belongsToMany('App\Role', 'role_user');
    В дополнение к заданию имени соединительной таблицы, вы можете также задать имена столбцов ключей в таблице, передав дополнительные параметры методу belongsToMany(). Третий аргумент — это имя внешнего ключа модели, на которой вы определяете отношения, в то время как четвертый аргумент — это внешний ключ модели, с которой вы собираетесь связаться:

    PHP:
    1. return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');
    Так как у тебя соединительная таблица не по Eloquent-овски обзывается, в остальном все должно быть без сучка и задоринки
     
    artoodetoo нравится это.
  6. Exort

    Exort Активный пользователь

    С нами с:
    30 апр 2016
    Сообщения:
    100
    Симпатии:
    2
    Дружище, наверное ты меня не понял)

    У меня есть таблица, которая связывает статьи и текстовые модули. Она называется TextModulesList. Строки в этой таблице хранят ID статьи и ID текстового модуля, т.е. текстовые модули и статьи между собой никак не связаны, а только через эту таблицу. Мне нужно по ID статьи найти все связи в TextModulesList и на основании этих связей получить все TextModules.
     
  7. Exort

    Exort Активный пользователь

    С нами с:
    30 апр 2016
    Сообщения:
    100
    Симпатии:
    2
    Решил проблему при помощи hasManyThrough

    PHP:
    1.     public function getTextsLists()
    2.     {
    3.         return $this->hasManyThrough('App\Text', 'App\TextsList', 'article_id', 'id', 'id');
    4.     }
    Спасибо за внимание.