如何允许Yii中的相关模型为空

如何允许Yii中的相关模型为空,yii,Yii,在我的Yii应用程序中,我有一个非常简单的模型设置。我已经使用gii自动生成的代码创建了基本的CRUD,同时为我的应用程序获取了数据 array('...','...','author', 'required'), 所以,我有作家和书籍。书属于作者 array('...','...','author', 'required'), 我已经有一个庞大的图书列表要输入——但由于我还没有输入作者——我的所有图书都不会保存,因为我在保存时一直在“尝试获取非对象的属性”,而没有选择作者——尽管没有将作者

在我的Yii应用程序中,我有一个非常简单的模型设置。我已经使用gii自动生成的代码创建了基本的CRUD,同时为我的应用程序获取了数据

array('...','...','author', 'required'),
所以,我有作家和书籍。书属于作者

array('...','...','author', 'required'),
我已经有一个庞大的图书列表要输入——但由于我还没有输入作者——我的所有图书都不会保存,因为我在保存时一直在“尝试获取非对象的属性”,而没有选择作者——尽管没有将作者设为“必需”

array('...','...','author', 'required'),
由于我没有按作者组织我的书籍列表(这是CSV列表中标题的直接列表),这会阻止我保存任何书籍

array('...','...','author', 'required'),

如何使作者可选?

在图书模型的“规则”功能中,您应该看到如下内容:

array('...','...','author', 'required'),
您所要做的就是从数组中删除“author”属性,这样就不再需要它了。当然,这只有在DB的Book表中的“author”列被标记为not required时才起作用

array('...','...','author', 'required'),

我希望它能帮助你,但恐怕它不能解决你的问题。您收到的错误消息“尝试获取非对象的属性”表明您有另一个问题,而不是提交表单中的未设置必需属性。如果是这种情况,您可以发布BooksController的“创建”函数和相关的“\u表单”视图,以确定出了什么问题

您可以先导入作者,但这也可能不起作用,因为您的csv中没有作者id

array('...','...','author', 'required'),
如果我是你,我会删除外键(不是author_id字段,只是fk)并导入我的书籍,然后添加作者,完成后再次添加外键以确保数据完整性,并在将来使用它

array('...','...','author', 'required'),

如果你那样做,我不会抱怨,所以答案比我意识到的要简单得多——我的关系不对。我需要的不是“属于”,而是“拥有”。has one关系允许空值。

感谢您的想法-恐怕没有帮助。我没有作者id作为必填字段。如果我没有为一本书设置一个有效的作者id,上面提到的错误甚至会在检查验证之前出现。这与关系有关,但我不知道如何让Yii在相关字段中允许一个“null”值。我只是看到您希望将author设置为可选,在这种情况下,只需删除关系就可以了,以后甚至不添加它,转到phpmyadmin,打开表,打开Relationship视图并删除author_id。谢谢,不幸的是,我没有要导入的作者列表,书名通常包含作者(但格式很多,因此我无法以编程方式进行计算)。db没有强制的pk关系,只有Yii,所以除了Yii关系之外没有什么可以删除的,因为Yii关系会破坏应用程序的其余部分。到目前为止,我已经通过创建一个“未设置”的默认作者来解决这个问题,但这还远远不够理想。
array('...','...','author', 'required'),