首先看看我的结构代码。我需要获得用户汽车有限的优惠。我有硬编码3包。注册时获得的免费使用。银色和金色。如果用户订阅银牌,请参阅8个优惠;如果订阅金牌,请参阅15个优惠。如果没有订阅者,请参阅2个优惠(免费套餐)。我的代码:
用户迁移:
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();用户模型:
public function subscriptions_users(){
return $this->hasMany('App\Subscription');
}
public function cars(){
return $this->hasMany('App\Car');
}
public function offers(){
return $this->hasMany('App\Offer');
}汽车迁移:
$table->bigIncrements('id');
$table->string('car_type');
$table->string('mark');
$table->string('model');
$table->unsignedInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');汽车型号:
public function images() {
return $this->hasMany(CarImages::class);
}
public function user() {
return $this->belongsTo('App\User');
}
public function offer() {
return $this->hasMany('App\Offer');
}提供迁移:
$table->increments('id');
$table->integer('price');
$table->unsignedInteger('user_id');
$table->unsignedInteger('car_id');产品型号:
public function car() {
return $this->belongsTo('App\Car');
}
public function user() {
return $this->belongsTo('App\User');
}订阅迁移:
$table->increments('id');
$table->string('subscription');
$table->integer('numberOfOffers');订阅模型:
public function users(){
return $this->hasMany('App\User');
}Subscription_user (带用户和订阅的透视表):
$table->increments('id');
$table->integer('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); //foreign key relation
$table->integer('subscription_id')->unsigned()->index();
$table->foreign('subscription_id')->references('id')->on('subscriptions')->onDelete('cascade'); Subscription_user型号:
public function users(){
return $this->belongsToMany('App\User');
}
public function subscriptions() {
return $this->belongsToMany('App\Subscription');
}每个人都认为工作很好,只是我需要得到限量版的汽车提供。受限版本是订阅表中的field $table->integer('numberOfOffers');。我可能在关系上有问题。我尝试了一下,但没有成功:
public function getOffers($carID) {
$car = Car::find($carID);
$offers = $car->offer()->limit(THIS IS PROBLEM I DON'T KNOW HOT TO CONNECT USER WITH numberOfOffers)->get();
return response()->json($offers);
}发布于 2019-03-05 22:30:32
当你需要对关系运行查询时,你应该像这样使用with方法:
$offers = Car::where('id', $carId)->with(['offer' => function($query) use ($limit){
return $query->take($limit);
}])->get();发布于 2019-03-05 23:52:18
尝尝这个。
public function getOffers($carID) {
if (!$subscriptionTierLimit = Auth::user()->subscriptions()->numberOfOffers) {
return Redirect::to('/login'); //You can do whatever redirect here.
}
$car = Car::find($carID);
$offers = $car->offer()->limit(subscriptionTierLimit)->get();
return response()->json($offers);
}https://stackoverflow.com/questions/55004926
复制相似问题