Как получить данные из другой таблицы, используя идентификатор из другой таблицы - PullRequest
0 голосов
/ 14 мая 2018

Я хотел бы получить данные из таблицы в другую таблицу, используя ее первичный ключ.

products_table:
id   name    type_id  date_added
 1   item1      2        1234
 2   item2      2        5678
 3   item3      1        0000

product_type_table:
id  type_name
 1    type1
 2    type2
 3    type3

Я запрашиваю первую таблицу, используя этот код:

Products::select('name','type_id')->where('id',$id)->get()

СейчасКак мне автоматически получить type_name из product_type_table, используя type_id из products_table?

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

вы можете использовать левое соединение.

DB::table('product_type_table')
        ->leftJoin('products_table', 'product_type_table.id', '=', 'products_table.type_id ')->where('product_type_table.id',$id)
        ->get();
0 голосов
/ 14 мая 2018

В модели продукта добавьте код для объединения двух таблиц:

use App\Models\ProductType;

public function type()
{
 return $this->belongsTo(ProductType::class);
}

и измените строку:

Products::select('name','type_id')->where('id',$id)->get()

до

Products::select('name','type_id')->with(['type' => function($q){
    return $q->select('type_name');
}])->where('id',$id)->get()

Надеюсь, это работает для вас.

0 голосов
/ 14 мая 2018

Как отметил Джек Скелетрон, в документации Laravel есть примеры для объединения двух или нескольких таблиц .

В вашем случае

$products = DB::table('products_table')
    ->join('product_type_table', 'products_table.type_id', '=', 'product_type_table.type_id')
    ->select('products_table.name, products_table.type_id')
    ->where('id', $id)
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...