我有一个具有构造函数(如下)的雄辩模型,它采用$type
param。这些类型是——比方说——first
、second
或third
。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class MyModel extends Model {
protected $table; // Define $table field
public function __construct($type = null, array $attributes = array()) {
// Initialize $table field
$this->table = isset($type) ? 'my_'.$type.'_table' : null;
parent::__construct($attributes);
}
?>
正如您在上面的代码中所看到的,我将模型的$table
属性设置为my[type]\u table
,因此我可以在3个表中的一个可用的情况下动态使用模型。这样地:
// Somewhere in controller
$type = 'first';
$myModel = new MyModel($type);
$myModel->create(.....); // <= Error is thrown here
问题是,当Elount尝试为表创建时间戳时,它不再关心我在\uu construct()
中设置的表名,而是尝试为名为my\u models
的表创建时间戳(这显然是基于模型的类名),而不是为(在本例中)创建时间戳我的第一张表格
:
SQLSTATE[HY000]:一般错误:1没有这样的表:my_models(SQL:插入到my_models(updated_at,created_at)值(2015-07-17 08:35:13, 2015-07-17 08:35:13))
有什么方法可以保留自动时间戳创建的动态表名吗?我在Laravel 5.1。
有点晚了
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class MyModel extends Model {
//-- using a mutator
public function setTypeAttribute($type)
{
//-- set type =)
$this->attributes['type'] = $type;
//-- then use this type for your table name convention
$this->setTable( 'my_'. $type .'_table' );
}
}
?>
当你调用$myModel-
只需将$type传递给$myModel-
public function __construct($attributes = array()) {
if (array_key_exists('type', $attributes)) {
$this->table = 'my_' . $attributes['type'] . '_model';
}
parent::__construct(array_except($attributes, 'type'));
}
它应该会起作用。
我想让我的子组件有一个ref,但是我不希望用户在创建组件时必须指定ref。所以说我有这样的东西: 我希望父组件能够访问子组件的状态。最简单的方法是为每个组件添加一个ref,但我希望这是在函数中完成的,以便从最终用户那里抽象出它,因为我希望这些组件被通用化。 有没有一种干净的方法可以让父组件访问子组件的状态,例如当创建子组件时,您有以下内容: 因此,在父类内部,我可以执行以下操作: 因此,我希望能够
我有一个类(我不能修改),它只有一个构造函数,它接受一个参数,如下所示: 由于构造函数可以抛出错误,我想实现错误处理。我的第一次尝试是: 但是,现在在块的范围内,不能在其他地方使用。如果我理解正确,我不能在没有初始化的情况下声明对象,因此我可以在块之外声明。那么,我该如何捕捉构造函数抛出的错误呢? 编辑:为了澄清,这是在我的中,在中我将中止程序。此外,参数是一个将被打开的文件,因此没有已知的安全输
我们正在构建一个与远程API通信的webapp。我想这样设计这个远程API的客户端: 关键是,我想在构建期间将凭据传递给这个客户端,并让所有其他方法使用这些凭据。我的第二个要求是我希望这个实例在会话中。 我在这里发现了如何传递动态构造函数参数。 我在这里发现了如何创建会话属性。 但我想不出一种方法来结合这两种技术。据我所知,您必须在自己的类getter方法中实例化会话属性。这种类似getter的方
问题内容: 我知道在Java中不设置创建时间戳记是因为Linux没有它,但是有没有办法在Java中设置文件(Windows)的创建时间戳记?我在这里做了一个基本的修改时间戳编辑器。 问题答案: 我相信您有以下选择: 查找可以执行此操作并且可以从命令行调用的工具。然后,您可以通过Java代码与之交互。 以下来自MSDN File Times的链接显示了任何工具的工作方式-特别注意功能和。 在这里,我
Spring文档说: 每个类只能标记一个带注释的构造函数,但是可以注释多个非必需的构造函数。在这种情况下,每个都被认为是候选的,Spring使用最贪婪的构造函数,其依赖关系可以得到满足——也就是说,具有最多参数的构造函数。构造函数解析算法与具有重载构造函数的非注释类相同,只是将候选对象缩小为注释构造函数。 我测试了它,当我有另一个由 错误: 组织。springframework。豆。工厂BeanC
我正在从一个教程中重构下面的代码。当我< s >运行编译它时,我得到以下错误: Vierbeiner类中的构造函数Vierbeiner不能应用于给定类型;必需:java.lang.找到字符串:无参数原因:实际参数列表和正式参数列表长度不同 我的理解是,发生这个错误是因为父类Vierbeiner有一个需要字符串参数的构造函数,而没有一个不需要参数的构造函数。我不明白的是,为什么我在没有创建Hund类