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 pricemarcas
id brand_nameCada 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()->brandEl nombre de la marca:
Product::first()->brand->brand_nameDe 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?