#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')