Как использовать Присоединение в Laravel?

У меня есть две таблицы: product, product_names

Product   Product_names
id        id | name | language | objectId

Я использую функцию names() в модели, которая соединяет эти обе таблицы с помощью key: id = objectId

Когда я делаю запрос, например:

$arr = Product::with("names")->get();

Я получаю коллекцию с объектом из таблицы Product и разделяю прохладную часть с names()

Как я могу объединить это в один результат коллекции?

Итак, мне нужно получить что-то вроде:

$oneResultObject = SELECT Product_names.name AS name from Product LEFT JOIN Product_names ON Product_names.objectId = Product.id;

Без использования ::with("Product_names")


person Babaev    schedule 28.09.2016    source источник


Ответы (2)


Например:

модель product.php

class Product extends Model
{
    protected $primaryKey = 'id';

    function productNames() {
       return $this->hasOne('App\ProductName', 'id', 'objectId');
    }

    public function show($id){
         self::with('productNames')->where('id', $id)->get();
    }
}

в ProductController.php

 public function viewProduct($id, Product $products)
    {
        $product = $products->show($id);
        return view('product', ['products' => $products]);
    }

в product.blade.php

<table>
<tbody>
@foreach ($products as $product)
<tr>
<th>{{ $product->id }}</th>
<td>{{ $product->productNames->name }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>

Надеюсь, это решит вашу проблему

person Ilya Yaremchuk    schedule 28.09.2016
comment
Откуда вы взяли Post? - person Babaev; 29.09.2016
comment
Почему я не могу использовать простой: $subcategories = Product::with("productNames")->get(); ? - person Babaev; 29.09.2016
comment
Сообщение это ошибка, исправил. Я написал все подробности. - person Ilya Yaremchuk; 29.09.2016