Laravel eloquent получает свойство модели текущего запроса

#laravel #laravel-5 #eloquent

#laravel #laravel-5 #eloquent

Вопрос:

Я пытаюсь выполнить предложение where для fortune_code внутри таблицы joindraw, сравнивая с lucky_fortune_code из таблицы product. Как я могу получить доступ и выполнить проверку?

 Product::where('status', StatusConstant::PT_ENDED_PUBLISHED)
       ->where('lucky_fortune_code', '<>', '')
       ->with(['joindraw' => function ($query){
              $query->where('fortune_code', $this->lucky_fortune_code)
                    ->with('user');}])->desc()->get();
  

Product.php

 class Product extends Model
{
    public function joindraw(){
        return $this->hasMany('AppModelsJoindraw');
    }
  

Joindraw.php

 class Joindraw extends Model
{
    public function product(){
        return $this->belongsTo('AppModelsProduct', 'product_id');
    }
  

Комментарии:

1. откуда вы берете этот «$this-> lucky_fortune_code»?

2. @GauravGupta Я не могу его получить. Считалось, что можно сделать это как в модели

3. попробуйте с продуктом. lucky_fortune_code или просто lucky_fortune_code

4. пробовал $query->where(‘fortune_code’, ‘lucky_fortune_code’) и $query->where(‘fortune_code’, ‘продукт. lucky_fortune_code’) ничего не возвращает

5. покажите вашу модель и взаимосвязь между моделями

Ответ №1:

Что вы можете сделать, так это объединить:

 Product::where('status', StatusConstant::PT_ENDED_PUBLISHED)
   ->where('lucky_fortune_code', '!=', '')
   ->join('joindraws', 'joindraws.fortune_code', '=', 'products.lucky_fortune_code')->get();
  

Кстати, вы также можете опустить второй 'product_id' параметр в belongsTo() отношении, поскольку это имя столбца уже предполагается по соглашению.

Кроме того, в построителе запросов отсутствует метод desc(). Используйте orderBy('lucky_fortune_code', 'desc') вместо этого.

Однако всякий раз, когда вам приходится писать объединения в Laravel, вам следует подумать о своей структуре отношений, потому что, вероятно, что-то не так.

Комментарии:

1. Я хочу получить доступ к коду lucky_fortune_code в самом табличном продукте. У меня нет предопределенной переменной.

2. Как я могу объединить таблицу joindraws с таблицей user?

3. Спасибо за ваше напоминание! Я записал область видимости в файл модели для упрощения сопровождения. Системе потребуется изменить порядок в зависимости от ситуации.

4. Я понял! Достаточно просто -> с помощью(‘user’). Спасибо!!