Как получить все строки из таблиц, соединенных с сводной таблицей, имеют отношения или нет? - PullRequest
0 голосов
/ 23 октября 2019

Я использую Laravel для серверной части и определил все отношения для моделей.

У меня есть структура таблицы, подобная следующей:

table_A
id | title
1  | apple
2  | banana

table_B
id | A_id | C_id
1  | 1    | 1
2  | 1    | 2
3  | 2    | 2


table_C
id | title
1  | green
2  | red
3  | black

Выходные данные Теперь я хочу, чтобы все строки из table_A со всеми строками изtable_C в объекте строки table_A, и если A_id и C_id совпадают, сохраните данные в объекте table_C иным образом пустым

Пример

[
    0 : {
        id      :   1,
        title   :   'apple',
        table_C : [
            0 : {
                id      :   1
                title   :   green
                table_B : {
                        id   :  1,
                        A_id :  1,
                        B_id :  1
                } 
            },
            1 : {
                id      :   2
                title   :   red
                table_B : {
                        id   :  2,
                        A_id :  1,
                        B_id :  2
                } 
            },
            2 : {
                id      :   3
                title   :   black
                table_B :   null 
            }
        ]

    },
    1 : {
        id      :   1,
        title   :   'banana',
        table_C : [
            0 : {
                id      :   1
                title   :   green
                table_B :   null 
            },
            1 : {
                id      :   2
                title   :   red
                table_B : {
                        id   :  3,
                        A_id :  2,
                        B_id :  2
                } 
            },
            2 : {
                id      :   3
                title   :   black
                table_B :   null 
            }
        ]

    }
]

Я также определяю отношения laravel, пожалуйста, помогите мне лучше подходить для следующего вывода.

1 Ответ

0 голосов
/ 23 октября 2019

Точный результат не будет создан.

    $res = [];
    $t1 = DB::table('tableA')->get();
    $t3 = DB::table('tableC')->get();
    $t2 = DB::table('tableB')->get();
    $key = 0;
    foreach($t1 as  $table1)
    { 
        foreach($t3 as $ke => $table)
        {

            foreach($t2 as $table2)
            {
                if($table2->A_id == $table1->id && $table2->C_id == $table->id)
                {
                    $res[$key]['id'] = $table1->id;
                    $res[$key]['title'] = $table1->title;
                    $res[$key]['table_c']['id'] = $table->id;
                    $res[$key]['table_c']['title'] = $table->title;
                    $res[$key]['table_c']['table_b']['id'] = $table2->id;
                    $res[$key]['table_c']['table_b']['A_id'] = $table1->id;
                    $res[$key]['table_c']['table_b']['C_id'] = $table->id;                        
                }    
                else
                {
                    $res[$key]['id'] = $table1->id;
                    $res[$key]['title'] = $table1->title;
                    $res[$key]['table_c']['id'] = $table->id;
                    $res[$key]['table_c']['title'] = $table->title;

                }

            }
            $key++;
            reset($table2);

        }
        reset($table);
    }
    dd($res);

Вывод будет

 array:6 [▼
 0 => array:3 [▼
"id" => 1
"title" => "apple"
"table_c" => array:3 [▼
  "id" => 1
  "title" => "green"
  "table_b" => array:3 [▼
    "id" => 1
    "A_id" => 1
    "C_id" => 1
  ]
]
]
1 => array:3 [▼
"id" => 1
"title" => "apple"
"table_c" => array:3 [▼
  "id" => 2
  "title" => "red"
  "table_b" => array:3 [▼
    "id" => 2
    "A_id" => 1
    "C_id" => 2
  ]
]
]
2 => array:3 [▼
"id" => 1
"title" => "apple"
"table_c" => array:2 [▼
  "id" => 3
  "title" => "black"
]
]
3 => array:3 [▼
"id" => 2
"title" => "banana"
"table_c" => array:2 [▼
  "id" => 1
  "title" => "green"
]
]
4 => array:3 [▼
"id" => 2
"title" => "banana"
"table_c" => array:3 [▼
  "id" => 2
  "title" => "red"
  "table_b" => array:3 [▼
    "id" => 3
    "A_id" => 2
    "C_id" => 2
  ]
]
]
5 => array:3 [▼
"id" => 2
"title" => "banana"
"table_c" => array:2 [▼
  "id" => 3
  "title" => "black"
]
]
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...