Невозможно получить выборочные имена столбцов в Laravel Eloquent вложенные нетерпеливые отношения

#php #laravel #eloquent #eloquent-relationship

#php #laravel #eloquent #eloquent-relationship

Вопрос:

У меня есть модель продукта со следующими отношениями:

 public function recommendedPricing()
{
    return $this->hasMany(RecommendedPricing::class);
}
  

Рекомендуемая модель ценообразования:

 protected $fillable = [ 'sku_id', 'unit_type_id', 'base_price', 'min_billable_qty', 'max_billable_qty', 'discount_method'];
protected $with = ['bands'];
public function bands()
{
    return $this->hasMany('AppModelsRecommendedPricingBand');
}
  

Рекомендуемая модель ценового диапазона выглядит следующим образом:

 protected $fillable = ['sku_id','recommended_pricing_id','start','end','percent_change','fixed_price'];
  

Теперь в моем контроллере я делаю это:

 Product::where('id', $product->id)->with(['recommendedPricing', 'recommendedPricing.bands'])->get();
  

что дает полный результат. Но я хочу, чтобы выбранные столбцы были как из рекомендуемой цены, так и из рекомендуемой ценовой группы. Итак, я попробовал это:

 Product::where('id', $product->id)->with(['recommendedPricing:id, base_price, discount_method', 'recommendedPricing.bands:id, percent_change, fixed_price'])->get();
  

Но это всегда приводит к ошибке.

Мой вопрос: есть ли какой-либо лучший подход или способ получить правильный результат для такого сценария вложенных отношений?

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

1. Попробуйте with(['recommendedPricing' => function($query) { $query->select('......

Ответ №1:

При загрузке определенных полей у вас не может быть пробелов. Обычно я делаю отдельную строку with для каждого отношения. Я не думаю, что вам тоже нужен массив. И вам всегда нужно сначала получить идентификатор, который у вас уже есть 🙂 надеюсь, это сработает…

 ->with('recommendedPricing:id,base_price,discount_method')
->with('recommendedPricing.bands:id,percent_change,fixed_price')