OctoberCMS获取正在保存的组件的ID

时间:2018-01-24 09:08:52

标签: laravel octobercms

我正在尝试使用上传文件的路径更新表格,以便通过电子邮件发送下载链接,但我似乎无法获取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,任何人都可以帮我看看我在哪里正在播音?

3 个答案:

答案 0 :(得分:1)

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

<!doctype html>
<html lang="en">
  <head>
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <script src="js/jquery.min.js"></script>
    <link rel="stylesheet" type="text/css" href="css/bootstrap.css">
    <script src="js/bootsrap.js"></script>
</head>
</body>
<div class="dropdown">
        <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Dropdown Example
        <span class="caret"></span></button>
        <ul class="dropdown-menu">
          <li><a href="#">HTML</a></li>
          <li><a href="#">CSS</a></li>
          <li><a href="#">JavaScript</a></li>
        </ul>
      </div>
  </body>
</html>

因此更新查询如下所示:

$manual->id

答案 1 :(得分:1)

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()返回模型中定义的主键字段的名称

答案 2 :(得分:0)

这是因为当您拨打 ajax request 时,它不会调用 pageCycle

result code in pagenot executed

您的网页代码可能看起来像这样

{% component 'yourComponent' id=someID %}

not executed

期间此代码为ajax call
  在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
}

也可以参考这个答案

链接:OctoberCMS. Variable disappears after ajax request

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