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

Ana*_*ent 1 php mysql sql laravel laravel-4

这些是我的模型

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

class XMLDocument extends Eloquent{
public function dateAttribute(){
        return $this->hasOne('DateAttribute');
    }
}
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会发生这种情况,我有很多很多关系,而且所有关系都正常,只是这个不起作用

请注意,错误消息中的和之间x_ml_document_id有一个,我搜索了所有代码,根本没有这个词。underscorexml

请帮助

Chr*_*sen 5

这是由模型的命名引起的。默认情况下,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');
    }
}
Run Code Online (Sandbox Code Playgroud)