Soy nuevo en laravel y quiero implementar una relación elocuente.
Dejame explicar.
Considere que tengo 2 mesas
productos
product_id product_name brand_id price
marcas
id brand_name
Cada producto tendrá una identificación de marca. Pero en la tabla Marcas, no hay ninguna identificación de producto. Un brand_id puede estar en varias filas de productos y un producto solo tiene un brand_id. Quiero seleccionar alguna columna de la tabla de productos más brand_name con respecto a brand_id de la tabla de productos usando Model.SO en el modelo de producto que escribí:
public function brands() { return $this->hasOne('App\Brand','product_id'); }
y en Brand model escribo:
public function products() { return $this->belongsTo('App\Product','brand_id'); }
Ahora quiero el resultado:
product_name price brand_name
¿Cómo puedo obtener esos datos en el controlador usando una relación elocuente? Además, la forma en que escribí Relación modelo, ¿está bien?
Su relación de modelo de producto estará a continuación
public function brand(){ return $this->belongsTo('App\Brand','brand_id'); } public function product(){ return $this->belongsTo('App\Product','product_id'); }
Ahora en el controlador puede agregar una consulta como se muestra a continuación.
$products = Product::with('brand','product')->get(); echo '<pre>' print_r($products->toArray()); exit;
Me parece que desea una relación one-to-many
, por lo que una marca puede tener muchos productos y muchos productos pertenecen a una marca.
Modelo del Producto:
public function brand() { return $this->belongsTo('App\Brand'); }
Modelo de marca:
public function products() { return $this->hasMany('App\Product'); }
Entonces podría obtener la información de la marca de esta manera:
El modelo completo de la marca:
Product::first()->brand
El nombre de la marca:
Product::first()->brand->brand_name
De losdocumentos :
Se utiliza una relación de uno a muchos para definir relaciones en las que un solo modelo posee cualquier cantidad de otros modelos. Por ejemplo, una publicación de blog puede tener una cantidad infinita de comentarios.
PD:
Los nombres de las columnas de su tabla no tienen mucho sentido para mí, ¿por qué tiene product_id
en los productos pero luego en las marcas simplemente se llama id
? ¿Por qué tiene product_name
pero luego solo price
? ¿Por qué no es solo name
o product_price
, por lo que al menos es consistente?