在Laravel中使用Mass Assignment将变量从控制器传递给模型

时间:2015-01-15 15:44:23

标签: php mysql laravel mass-assignment

我是Laravel的新人。

我要在Laravel中上传图片我使用Intervention Image这是我的控制器

public function store()
    {
        $validator = Validator::make($data = Input::all(), City::$rules);
        if ($validator->fails())
        {
            return Redirect::back()->withErrors($validator)->withInput();
        }
        $image_temp=Input::file('image');
        $name = Input::file('image')->getClientOriginalName();
        if(Image::make($image_temp->getRealPath())->save('public/up/city/'.$name)){
            $image='public/up/city/'.$name;
        }
        City::create($data);
        return Redirect::route('siteadmin.cities.index');
    }

这是我的模型

class City extends \Eloquent {
   protected $primaryKey='city_id';
   protected $fillable = ['name', 'parent_id', 'english_name','population','phone_prefix','image'];
}

这是我的路线

Route::resource('cities', 'CitiesController');

一切运作良好但我不知道如何将变量作为特殊字段发送到Mass Assignment。

我需要 $ image 变量才能保存在 cities 图片字段

if(Image::make($image_temp->getRealPath())->save('public/up/city/'.$name)){
                $image='public/up/city/'.$name;
            }

但是我的数据库中的图像填充了上传文件的临时名称: enter image description here

1 个答案:

答案 0 :(得分:1)

只需覆盖$data数组中的值:

$data['image'] = 'public/up/city/'.$name;

如果你这样做

$image = 'public/up/city/'.$name;

...您将值存储在局部变量中但没有任何反应。数据库中的值来自"原始" $data,表单数据。它是上传文件的临时路径。您需要更改它以便Laravel填充数据库中的新值。


这里是(几乎)完整的代码,以避免任何混淆:

$validator = Validator::make($data = Input::all(), City::$rules);
if ($validator->fails())
{
    return Redirect::back()->withErrors($validator)->withInput();
}
$image_temp=Input::file('image');
$name = Input::file('image')->getClientOriginalName();
if(Image::make($image_temp->getRealPath())->save('public/up/city/'.$name)){
    $data['image'] = 'public/up/city/'.$name;
}
City::create($data);
return Redirect::route('siteadmin.cities.index');