Laravel查询额外有一个下划线符号


laravel query has an underscore sign extra

这些是我的模型

class DateAttribute extends Eloquent{
public function xmlDocument(){
        return $this->belongsTo('XMLDocument');
    }
}
class XMLDocument extends Eloquent{
public function dateAttribute(){
        return $this->hasOne('DateAttribute');
    }
}

XMLDocument模型有一个DateAttribute模型。我可以成功地插入两个表。

现在我正试图读取一个特定的xml文档。换句话说,我正在尝试查看xml文档。

我在我的视图中尝试了这个:

 <td>{{$xmlDocument->dateAttribute->name}}</td>
I got this error:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'date_attribute.x_ml_document_id' in 'where clause' (SQL: select * from `date_attribute` where `date_attribute`.`x_ml_document_id` = 10 limit 1)

我不知道为什么会这样,我有很多很多的关系,都很好,只是这一个不工作

请注意,错误信息有x_ml_document_id,在xml之间有一个underscore,我搜索了所有的代码,我根本没有那个词。

帮助请

这是由模型的命名引起的。默认情况下,Eloquent试图通过读取模型名来找出您正在使用的本地键和外键。如您所见,您的DateAttribute模型变成了date_attribute。CamelCase被转换为下划线

请注意,Eloquent根据模型名假定关系的外键。在本例中,假定Phone模型使用user_id外键。如果您希望重写此约定,您可以向hasOne方法传递第二个参数。此外,您可以向方法传递第三个参数,以指定应该用于关联

的本地列。

因此,要解决您的问题,请在hasOne的第二个和第三个参数中定义外/本地键。例句:

class XMLDocument extends Eloquent
{
    // Define table name
    protected $table = 'xml_document';
    public function dateAttribute()
    {
        return $this->hasOne('DateAttribute', 'xml_document_id');
    }
}