php - Laravel雄辩的ORM-save()返回未找到的列(MySQL错误)

原文 标签 php orm model laravel-4 eloquent

我遇到的问题是我想保存模型,但是我有一个方法调用写入实例,由于某种原因,Laravel试图更新该列。

俱乐部型号(相关代码):

use Illuminate\Database\Eloquent\SoftDeletingTrait;

class Club extends Eloquent 
{
    use SoftDeletingTrait;

    protected $table = 'clubs';
    protected $fillable = array('name', 'address', 'city', 'state', 'zip', 'contact_name', 'contact_email', 'contact_phone', 'contact_photo', 'club_code', 'logo');


    public function getCurrentCampaign($id = 0)
    {

        if (!$id)
        {
            if ($this->currentCampaign)
            {
                return $this->currentCampaign;
            }

            $id = $this->id;
        }

        $now = date('Y-m-d H:i:s');
        $this->currentCampaign = DB::table('campaigns')
            ->where('club_id', $id)
            ->where('start_date', '<=', $now)
            ->where('end_date', '>=', $now)
            ->pluck('id');

        return $this->currentCampaign;
    } 
}


该问题存在于“俱乐部设置”页面上,用户可以在其中编辑一些内容-我在不同的表上运行了一些更新,然后稍后使用$club->save()。我发现即使我在getCurrentCampaign之后直接调用它,也会引发错误。

    $club = Club::findOrFail($clubID);
    $club->getCurrentCampaign();
    $club->save(); // Error


错误信息:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'currentCampaign' in 'field list' (SQL: update俱乐部set updated_at = 2014-07-08 12:49:17, currentCampaign = 27 where id = 23)

考虑到currentCampaign不在$fillable数组中,所以我不知道发生了什么。我误会了它的工作原理吗?

谢谢

编辑:为清楚起见,$club中加载了一些不同的内容,而不仅仅是广告系列。我只是为了说明目的而给出一个。

最佳答案

您保存在Model对象上的不是属性的任何内容都将被视为属性/表列。为了避免这种情况,您可以简单地在模型上声明这些属性:

// Club model
public $currentCampaign;


然后,使用您的代码不会导致您现在遇到的错误。

无论如何,可能您应该考虑使用@watcher的建议处理关系,但这取决于您的应用程序。



关于fillable数组-它与保存数据无关,而与用数据数组填充对象(质量分配)有关:

$model->fill($someArray);


当您__construct新对象,保存或更新提供数组等时,将调用此方法。

相关文章:

php - 混淆了php中的mysql事务

php - 如何使用PHP openssl命令(DER格式)获得相同的输出SMIME签名

java - 通过服务器运行Java

php - 如何在YII2中创建模块

c# - 实体框架:将varchar映射到DateTime属性

mysql - atk4数据库表ID

c# - 想要在事务的后续插入中使用从插入返回的身份

android - OrmLiteBaseActivity与AppCompatActivity?

php - Laravel属于ToMany仅返回特定列

php - 一般规则-何时使用模型(Codeigniter)