Присвоить значение красноречивой модели после массового присвоения в Laravel

#php #laravel #laravel-4 #eloquent

#php #laravel #laravel-4 #eloquent

Вопрос:

У меня есть следующий код:

 public function postCreate($subjectId = null) {
    if ($subjectId) {
        $subject = Subject::find($subjectId);

        $input = Input::all();

        $v = Validator::make($input, Product::$rules);

        if ($v->passes()) {
            $product = new Product($input);
            $amazon_product = new AmazonProduct($input['amazon_id']);
            $product->price($amazon_product->price());

            $subject->products()->save($product);

            Session::flash('message', 'Produkt erfolgreich gespeichert');
            return Redirect::to('boss/subjects/show/'.$subjectId);
        }
    } else {
        Session::flash('message', 'Innerhalb der POST-Action muss die Gruppen-ID angegeben sein.');
        return Redirect::to('boss/subjects');
    }
}
  

Но я получаю следующую ошибку:

 Call to undefined method IlluminateDatabaseQueryBuilder::price()
  

Я думаю, что проблема в том, что массовое присвоение происходит в $product = new Product($input);

Есть ли какой-либо способ присвоить другое значение ПОСЛЕ этого? Значение для price отсутствует внутри $product .

Ответ №1:

Вы можете использовать это:

 $product->price = $amazon_product->price();
  

Вместо:

 $product->price($amazon_product->price());
  

Здесь $product это Eloquent Model объект и price свойство этого объекта, но вы используете его как method .

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

1. Конечно, какая глупая ошибка. Вчера было слишком поздно 🙂 Спасибо!