【问题标题】:Laravel update is not updating tableLaravel 更新不更新表
【发布时间】:2014-10-06 22:33:58
【问题描述】:

好的,所以我的问题是,我的 ajax 调用没有正确更新。它与我拥有的许多功能相同,只是不更新​​值。虽然,我可以在 mysql 中自己运行查询,并且更新正常。功能如下:

/*
 * "elerts/quicksave" > Update elert from all screen
 */
public function quicksave($id)
{
    $data = (object)Input::get();

    $ev = Events::find($id);
    $ev->limit          = $data->limit;
    $ev->EventEnabled   = $data->EventEnabled;
    $ev->SundayStart    = $data->SundayStart;
    $ev->MondayStart    = $data->MondayStart;
    $ev->TuesdayStart   = $data->TuesdayStart;
    $ev->WednesdayStart = $data->WednesdayStart;
    $ev->ThursdayStart  = $data->ThursdayStart;
    $ev->FridayStart    = $data->FridayStart;
    $ev->SaturdayStart  = $data->SaturdayStart;
    $ev->save();

    $queries = DB::getQueryLog();
    $last_query = end($queries); dd($last_query);

    return "Your eLert has been saved!";
}

下面是一个正在传递的示例 ID 和一个正在传递的 $data 对象的示例。

$id = '107';
object(stdClass)#137 (9) { ["limit"]=> string(3) "400" ["EventEnabled"]=> string(1) "1" ["SundayStart"]=> string(1) "0" ["MondayStart"]=> string(1) "0" ["TuesdayStart"]=> string(1) "0" ["WednesdayStart"]=> string(1) "0" ["ThursdayStart"]=> string(1) "1" ["FridayStart"]=> string(1) "1" ["SaturdayStart"]=> string(1) "1"}

我很困惑为什么什么都没有更新。有什么帮助吗?

编辑:下面我已经包含了我的模型的代码,所以人们不必质疑它......

<?php
/**
 * @author jmadrigal
 * Date: 7/2/14
 * Time: 10:23 AM
 */
class Events extends Eloquent {

protected $primaryKey = 'eventid';
public $timestamps = false;

protected $fillable = array(
    'eventname', 'eventdescription', 'EventEnabled', 'visitcost',  'groupid', 'flagid', 'SundayStart', 'MondayStart', 'TuesdayStart', 'WednesdayStart', 'ThursdayStart', 'FridayStart',
    'SaturdayStart', 'limit', 'Vtmpl', 'delayV', 'Etmpl', 'delayE', 'Ttmpl', 'delayT', 'Mtemp', 'delayM', 'Login', 'freqv', 'freqt', 'freqe', 'maxe', 'maxt', 'maxv',
    'amtide', 'amtidt', 'amtidv', 'apptinterval'
);

public function aInterval() {
    return $this->hasMany('AppointmentInterval');
}
}

【问题讨论】:

  • 您的Events 模型是最近添加的模型吗?另外,如果您返回$data,我们会得到object(stdClass)#137 (9) { ["limit"]=&gt; string(3) "400" ["EventEnabled"]=&gt; string(1) "1" ["SundayStart"]=&gt; string(1) "0" ["MondayStart"]=&gt; string(1) "0" ["TuesdayStart"]=&gt; string(1) "0" ["WednesdayStart"]=&gt; string(1) "0" ["ThursdayStart"]=&gt; string(1) "1" ["FridayStart"]=&gt; string(1) "1" ["SaturdayStart"]=&gt; string(1) "1"},对吗?
  • 事件模型实际上已经使用了好一分钟。它已经存在了几个月。这是正确的。事实上,我正在更新我的代码以包含模型,这样人们就可以看到我在哪里使用它。

标签: php mysql laravel laravel-4 eloquent


【解决方案1】:

你很可能没有defined the mass-assignment attributes你的Events模特。

所以在你的Events 模型中尝试:

protected $fillable = array('limit', 'EventEnabled', 'SundayStart', 'MondayStart', 'TuesdayStart', 'WednesdayStart', 'ThursdayStart', 'FridayStart', 'SaturdayStart');

这是 Laravel 的一项安全功能,有助于防止盲目地允许更新任何属性。

【讨论】:

  • 我已经检查过了,对象中的每个变量都是被传递的,都在可填充数组中。但是,即便如此,我也不会批量分配。我正在单独分配它们中的每一个,所以这里甚至不应该成为问题。如果我使用 ->update($data); 转储数组;我明白我为什么要处理这个问题,但这是我单独分配它们的时候。
【解决方案2】:

为任何复选框发送“字符串”的类型没有进入,因为值需要是 (int) 值或 (bool) 值“1”或“0”。这就是问题所在。数据库是一年前由其他人建立的,直到现在我才知道。不过已经解决了。

【讨论】:

  • 我讨厌这种事情发生。因为当它不是你的焦点时,如此清晰的东西可能会变得很模糊,而焦点是代码。
猜你喜欢
  • 2020-12-20
  • 1970-01-01
  • 2019-06-11
  • 2017-09-14
  • 2020-07-09
  • 2020-05-30
  • 2017-07-03
  • 2019-09-15
  • 1970-01-01
相关资源
最近更新 更多