【问题标题】:Laravel settable doesn't work as expectedLaravel 可设置不能按预期工作
【发布时间】:2017-06-02 03:46:27
【问题描述】:

编辑:只是为了节省时间,因为有些人会添加响应但不阅读 cmets。看来,虽然我们可以即时设置表格,它适用于获取和获取,但它不适用于更新。

现在是原始问题:

我有一个动态表名的问题,我可以通过我尝试过的代码来最好地解释: 这就是我的工作和工作:

$ymodel = new \App\YCenter;
$ymodel->setTable('tableNo1');
$tops = $ymodel->take(10)->get();
var_dump($tops);

但这是我尝试过的:

$ymodel = new \App\YCenter;
$ymodel->setTable('tableNo1');

$ymodel->updateOrCreate(
    ['url' => 'heyhey','article_id' => 1],
        ['text'=>'texttext']
); 

得到了这个错误:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 
'mydatabase.y_centers' doesn't exist (SQL: insert into `y_centers`...

有什么想法吗?提前致谢。

编辑:我们的想法是即时设置表格,这就是我这样做的原因。我不想在模型本身上设置表格。

【问题讨论】:

  • 您设置了“tableNo1”,但错误提示找不到表“y_centers”。您是否在模型中定义了 $table
  • 没有涡流。我没有因为表格会根据代码而改变。这不就是可设置方法的全部思想吗?
  • 是的,但是您正在设置的表和错误有两个不同的名称。好吧,在您提供的示例中。无论如何,错误来自 MYSQL 本身,说该表不存在。所以我的问题是,该表是否已经存在?
  • 如您所见,表的名称相同,只是为了确保我再次运行脚本。似乎 settable 适用于 get() 和 first() 但不适用于 updateorcreate。
  • 好的,那么你可以避免使用它。但是在您的示例中,表名不一样。在您的代码中,您编写了$ymodel->setTable('tableNo1');,但错误显示为'mydatabase.y_centers'。所以似乎没有找到“y_centers”。

标签: laravel model eloquent


【解决方案1】:

一些 laravel 方法创建一个对象的新实例

这不起作用:

 $someModel = new RunTimeObject();
 $someModel->setTable('newTable');
 return $someModel->all();

这是因为 all() 在后台创建了一个新的 someModel。 如果您使用非静态方法:(例如 ->get() )

    $runtime = new RunTimeObject();
    $runtime->setTable('newTable');
    return $runtime->get();

它会起作用,所以你只能使用非静态方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 2015-06-26
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多