十月CMS获取正在保存的组件的ID



我正在尝试使用上传文件的路径更新表,以便轻松通过电子邮件发送下载链接,但我似乎无法获得 id。

我的组件如下所示:

public function onAddJob() {
    $manual = new Job();
    $manual->company = Input::get('company_name');
    $manual->ordered_by = Input::get('client_name');
    $manual->ordered_by_email = Input::get('client_email');
    $manual->emergency_no = Input::get('emergency_no');
    $manual->instructions = Input::get('instructions');
    $manual->project_name = Input::get('project_name');
    $manual->fileupload = Input::file('fileuploader');
    $manual->save();
    $this->id = $this->property('id');
    Db::table('manual_jobs')->where('id', $this->id)->update(['path' => $manual->fileupload->getPath()]);

一切都保存得很好,但路径没有更新,因为我没有正确获取 id,任何人都可以帮我告诉我我在哪里菜鸟?

id 组件由模型上的变量$primaryKey定义

缺省情况下,主键'id'对应于名为 id 的数据库表字段

您可以通过将$primaryKey设置为另一个键来覆盖默认键名

class Foo extends Model {
     $primaryKey = 'foo_id';
}

我为什么要解释这一点是因为您不需要知道字段的名称。

您可以做的是:

$foo = new Foo();
$foo->bar = 'baz';
$foo->save();
echo $foo->getKey();
echo $foo->getAttribute($foo->getKeyName());
echo $foo->{$foo->primaryKey}

它们都将在对象上打印出新创建的主键。

getkey() 返回主键的值。
getKeyName() 返回模型中定义的主键字段的名称

解决方案比我想象的要简单得多。我正在寻找的是这个:

$manual->id

因此,更新查询如下所示:

Db::table('manual_jobs')->where('id', $manual->id)->update(['path' => $manual->fileupload->getPath()]);

这是因为当你调用ajax request时,它不会调用pageCycle

作为result您的code in pagenot executed.

页面上的代码可能看起来像这样

{% component 'yourComponent' id=someID %}

但是此代码在ajax call期间not executed

若要在ajax call期间执行页面代码,需要explicitly调用$this->controller->pageCycle()

所以新代码看起来像

public function onAddJob() {
    // we are calling page code explicitly 
    $this->controller->pageCycle();
    $manual = new Job();
    $manual->company = Input::get('company_name');
    $manual->ordered_by = Input::get('client_name');
    ... other code
}

也参考这个答案

链接 : 十月CMS.变量在 ajax 请求后消失

如果您仍然发现问题,请发表评论。

最新更新