【问题标题】:PHP Laravel save model properties via constructorPHP Laravel 通过构造函数保存模型属性
【发布时间】:2018-09-24 21:15:49
【问题描述】:

我试图通过控制器简单地将模型保存到数据库中,而不直接设置字段,而是将它们设置在所述对象的构造函数中。

这是处理逻辑的类。如果注释掉的行

//$todoItem->item = $todo; 未注释,它工作正常并将 $todo 中输入的任何内容保存在数据库中。但是,我想在任务对象的构造函数中设置该值,而不需要手动指定它。我发现了这个问题:Laravel with Eloquent doesn't save model properties on database 建议我可以将属性设置为受保护并让它工作,但仍然不行。

NewTodo.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class NewTodo extends Controller
{

    public function saveTodoItem(Request $request)
    {

        $todo = $request->input('content');
        $todoItem = new \App\Task($todo);
        //$todoItem->item = $todo;
        $todoItem->save();

        return view('testview', ['name' => $todoItem->getItem()]);
    }
}

Task.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    protected $item = null;

    function __construct($newItem)
    {
        $this->item = $newItem; 
    }

    function getItem()
    {
        return $this->item;
    }


}

总结,数据库条目被存储为空白,除非在构造函数中设置 $todo->item 时手动设置 $todo->item。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您不需要在构造函数中指定这些。你可以使用Mass Assignment

    型号:

    class Task extends Model
    {
        protected $fillable = ['item'];
    }
    

    控制器:

    class NewTodo extends Controller
    {
    
        public function saveTodoItem(Request $request)
        {
    
            $todo = $request->input('content');
            $todoItem = new \App\Task::create(['item' => $todo]);
    
            return view('testview', ['name' => $todoItem->getItem()]);
        }
    }
    

    【讨论】:

    • 非常感谢。谢谢,将在 4 分钟内接受。
    猜你喜欢
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    相关资源
    最近更新 更多