Получите автомобиль с ограниченными предложениями Laravel

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

Модель подписки_пользователя:

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);
}

Потратьте некоторое время, чтобы прочитать laravel.com/docs/5.8/красноречивые отношения Похоже, что в вашей текущей настройке возникают конфликты в отношении использования и конфигурации отношений. У вашего User может быть несколько Subscriptions? Если это так, вам нужно будет запросить их самый высокий уровень Subscription, чтобы это работало так, как вы хотите.

PaulELI 06.03.2019 02:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
223
2

Ответы 2

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

$offers = Car::where('id', $carId)->with(['offer' => function($query) use ($limit){
    return $query->take($limit);
}])->get();

$limit неопределенная переменная? Как определить $limit?

Alex Al 05.03.2019 15:32

Я имею в виду количество предложений, которое вам нужно, например 5

hoseinz3 05.03.2019 15:34

Я это знаю... Как это получить? Это вопрос. @hoseinz3

Alex Al 05.03.2019 15:35

изменить function($query){ на function($query) use ($limit){

Davit 05.03.2019 15:39

перед этим запросом вы должны указать количество предложений, которое вы хотите, другим запросом на основе подписок пользователя

hoseinz3 05.03.2019 15:40

@Давит, я изменился

hoseinz3 05.03.2019 15:41

@hoseinz3 hoseinz3 Я вижу ваши изменения, и ваш код также должен работать (проголосуйте за меня)

Davit 05.03.2019 15:42

$limit — это то, что вы показали в своем коде: $subscription->numberOfOffers как вы правильно объяснили? Так что он ожидает, что вы запросите свой лимит и используете его.

Dan Fletcher 05.03.2019 17:45

@Davit Ваш ответ с добавлением отношения в модельной работе, но я всегда получал 3 предложения.

Alex Al 05.03.2019 22:12

@Davit, хорошо, твой код работает нормально, просто всегда возвращай мне 3 предложения, всегда. Если пользователь silver return 3 предлагает именно это, это ошибка $car = Car::find($id); if (!$car) { return response()->json([ 'message' => 'Упс, машина не найдена' ]); } $firstSubscription = Auth::user()->subscriptions()->first(); $limit = $firstSubscription->numberOfOffers; $offers = Car::where('id', $id)->with(['offer' => function($query) use ($limit) { $query->take($limit); }])- >получить(); вернуть ответ()->json($offers);

Alex Al 05.03.2019 22:24

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

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);
}

Неопределенное свойство: Illuminate\Database\Eloquent\Relations\HasMany::$numberOfOff‌​ers @paulELI

Alex Al 05.03.2019 17:03

Обновил, попробуйте с subscriptions() вместо subscriptions_users()

PaulELI 05.03.2019 17:35

Я обновляюсь, но снова Неопределенное свойство: Illuminate\Database\Eloquent\Relations\HasMany::$numberOfOff‌​ers"

Alex Al 05.03.2019 22:22

Другие вопросы по теме