繁体   English   中英

Laravel 5.3中的模型关系

[英]Model relationships in Laravel 5.3

我有网站购物车的MySQL表格:

Cart:
id | user 

Cart_goods:
cart_id | good_id | good_type

Details:
id | name

Appliances:

id | name

Class Cart,包含商品:

class Cart extends Model
{
 protected $table = 'cart';
 protected $fillable = ['user', 'sum', 'profit', 'discount'];
 protected $guarded = ['user'];

 public function goods()
 {
    return $this->hasMany('App\Models\Good');
 }
}

类别好,可以是详细信息或设备,相对于购物车由cart_id:

class Good extends Model
{
 protected $table = 'cart_goods';
 protected $types = [
    'Detail' => 'App\Models\Detail',
    'Appliance' => 'App\Models\Appliance'
 ];
 public $primaryKey = 'cart_id';

 public function good()
 {
    return $this->morphTo();
 }
}

详细课程:

class Detail extends Model {
 use SoftDeletes;

 protected $morphClass = 'Detail';
 protected $table = 'details';
 protected $fillable = ['article', 'name', 'photo', 'price_procurement', 'price_retail', 'serial', 'location_id', 'type_id', 'appliance_id', 'comment', 'for'];
 protected $dates = ['deleted_at'];
 protected $guarded = [];

 public function goods()
 {
    return $this->morphMany('App\Models\Good', 'good');
 }
}

我需要在购物车中获取所有设备和细节。 我怎么能用ORM做到这一点?

使用嵌套的预先加载 假设关系方法名称是cartGoodsdetailsappliances ,那么details信息是购物车的details信息,并且您已经定义了正确的关系:

Card::where('id', $id)
    ->with('cartGoods.appliances', 'details')
    ->first();

尝试这个:

方法1:如果您有$ cart模型实例

$cart->load('goods.good');

方法2:如果您需要购物车中的所有设备和详细信息,请使用卡ID

Cart::where('id', $cartId)->with('goods.good')->first();

我已经完成了这个,问题出在模型名称中,我将它写入数据库,如Detail和Appliance,但我需要使用

Relation::morphMap([
   'detail' => 'App\Models\Detail',
   'appliance' => 'App\Models\Appliance',
]);

在AppServiceProvider类中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM