Macroable.php 第 74 行中的 BadMethodCallException:方法保存不存在。拉拉维尔 5.2

Posted

技术标签:

【中文标题】Macroable.php 第 74 行中的 BadMethodCallException:方法保存不存在。拉拉维尔 5.2【英文标题】:BadMethodCallException in Macroable.php line 74: Method save does not exist. Laravel 5.2 【发布时间】:2017-01-09 14:30:00 【问题描述】:

你好,我是 laravel 的新手,现在我遇到了这个错误 BadMethodCallException in Macroable.php line 74: Method save does not exist.

如果我 var_dump(); die(); 所有输出,那么我将得到所有输出,但是当我使用 save 方法将结果保存到数据库时,它给了我这个 save method does not exist 错误。我不知道我的代码在哪里做错了。

请查看路由控制器和视图以获得正确理解。提前谢谢你。

控制器

public function td($id) 

    $tn = $this->t->getAllTn();
    $to = $this->t->getAllTo();

    $time = Carbon\Carbon::now(); // current time
    $time->toDateTimeString(); // converting time to string

    if((isset($_POST["n"]) && !empty($_POST["n"]))) 
        $tn->t_type_id = Input::get('options');
        $tn->d_id = $id;
        $tn->result = Input::get('message');
        $tn->date = $time;

        // var_dump($tn->date);
        // var_dump($tn->t_type_id);
        // var_dump($tn->d_id);
        // var_dump($tn->result);
        // die();

        Session::flash('message', 'Your tn has been added.');
        $tn->save();

     else if((isset($_POST["o"]) && !empty($_POST["o"]))) 

        $to->d_id = $id;
        $to->outcome = Input::get('message');
        $to->date = $time->toDateTimeString();

        // var_dump($to->d_id);
        // var_dump($to->outcome);
        // var_dump($to->date = $time->toDateTimeString());
        // die();

        Session::flash('message', 'Your to has been added.');
        $to->save();
    
    return redirect('/t');

路线

Route::get('/t/id', 'TController@td');
Route::post('/t/id', 'TController@td');

查看

 <div class="form-group">
<form action="/t/ $d['id'] " method="post">

                     csrf_field() 

<div class="panel-body"><h4>Heading here</h4></div>
        <select class="form-control" id="options" name="options" style="width:100%" type="checkbox">

            @foreach($t as $t)
                <option value=" $t->id "> $t->type </option>
            @endforeach 

        </select>
    </div> 

<div class="col-md-4" id="value" align="center">
            <div class="panel panel-warning">
                <div class="panel-heading">
                Enter text below
                </div>

                        <div class="form-group has-success">
                            <textarea class="form-control" id="message" name="message" placeholder="Please enter your message here..." rows="5"></textarea>
                            <input type="submit" class="btn btn-primary" name="n" value="A-N">
                            <input type="submit" class="btn btn-primary" name="o" value="A-O">
                        </div>
                </form>
            <!--          Notes: <br/>-->

        </div>

<script     src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<script>

function hide() 
$("#value").hide();
$("#h").hide();
 $("#search").hide();


function show() 
$("#value").show();
$("#h").show();
 $("#search").show();


function initHandlers() 
$("#options").on('click', function() 
    show();
);


hide();
initHandlers();

</script>

接口实现

public function getAllTn() 
  return TN::all();


public function getAllTO()
  return TO::all();

【问题讨论】:

您要保存收藏吗? $toTO::all() 的结果,它应该返回一个Collection 它只是一个文本区域消息以及一个 id 和日期时间e.g 'This is message" added on user id '5'...我不知道为什么我得到它... 我只是想将idresult (message) 存储在数据库中的列下。 TO:all() 表示获取table TO 中的所有列,如果您看到$to-&gt;d_id = $id; $to-&gt;outcome = Input::get('message'); $to-&gt;date = $time-&gt;toDateTimeString();,那么我只是从控制器中的表单中请求这些列,并且由用户通过视图中的表单... 【参考方案1】:

您实例化Models 的方式是错误的。尝试类似:

$to = new TO();

$to->d_id = $id;
$to->outcome = Input::get('message');
$to->date = $time->toDateTimeString();

$to->save();

【讨论】:

这肯定会起作用,但是如果您在视图中看到两个按钮T-AT-O,那么实际上我想要做的是当用户点击T-A 数据时保存在TA 表中,当用户单击T-O 时,数据将存储在TO 表中。为此我使用了if((isset($_POST["n"]) &amp;&amp; !empty($_POST["n"]))) ...你明白我的意思了吗? o 是的,它已经完成了......非常感谢你的帮助......你是对的,实际上我正在实例化“模型错误”......我在 isset 中调用了`new TO`它正在工作......我忘记了这部分......非常感谢你的帮助...... :)【参考方案2】:

您不需要获取所有项目来更新具有相同数据的所有项目吗?

如果模型字段是可填充的,您可以批量分配它们。

$data = [
    't_type_id' => request()->input('options'),
    'd_id'      => $id,
    'result'    => request()->input('message'),
    'date'      => $time->toDateTimeString()
];

TN::update($data); // this will update all TN entries

不确定是否只需要更新 TN 表中的 1 个或很多项?

【讨论】:

以上是关于Macroable.php 第 74 行中的 BadMethodCallException:方法保存不存在。拉拉维尔 5.2的主要内容,如果未能解决你的问题,请参考以下文章

如何以 json laravel 的形式返回分页

方法 Illuminate\Routing\Route::resource 不存在。在 Macroable.php 第 78 行

有没有办法更新 AsyncTask 中的变量?

HtmlServiceProvider.php 第 36 行中的 FatalErrorException:laravel

从 UITableView 中删除行会更改存储在其他行中的信息

AH00526:/etc/apache2/apache2.conf 第 74 行的语法错误:参数文件中的 Mutex 目录无效:$APACHE_LOCK_DIR