Получить автомобиль с ограниченными предложениями Laravel - PullRequest
2 голосов
/ 05 марта 2019

Сначала посмотрите мой структурный код.Мне нужно получить ограниченные предложения для пользователя автомобиля.У меня есть жесткий код 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');
}

Все работает нормально, просто мне нужно получить предложения для автомобиля в ограниченной версии,Ограниченная версия - поле $ 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);
}

Ответы [ 2 ]

3 голосов
/ 05 марта 2019

, когда вам нужно выполнить запрос по отношению, вы должны использовать такой метод:

$offers = Car::where('id', $carId)->with(['offer' => function($query) use ($limit){
    return $query->take($limit);
}])->get();
0 голосов
/ 05 марта 2019

Попробуй это.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...