I have a model Foo that corresponds to a table with the following columns.
id
description
user_id
I\'m setting the attributes of the Foo model individual
Just add $bar as an attribute in your foo class:
class Foo extends Model
{
public $bar;
//...
now you can use save() and Laravel will not try to store bar in the DB.
Explanation:
If you call save() on a model, only those attributes that are in the array $model->attributes will be saved to the database. If you define $bar as an attribute in the class Foo, then $foo->bar ="xyz" will never end up in the array $model->attributes.
However, if you do not have declared such an attribute for Foo, then __set() is called because you try to save something in an inaccessible property.
You may check out Laravel\Illuminate\Database\Eloquent\Model.php:
/**
* Dynamically set attributes on the model.
*
* @param string $key
* @param mixed $value
* @return void
*/
public function __set($key, $value)
{
$this->setAttribute($key, $value);
}
which basically calls
$this->attributes[$key] = $value;
from Laravel\Illuminate\Database\Eloquent\Concerns\HasAttributes.php.
Now $foo->bar ="xyz" will end up beeing in $foo->attribute['bar'] and this is why save() crashes with ..this column does not exists...