laravel查询有一个额外的下划线标志

时间:2014-07-13 13:12:18

标签: 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');
    }
}

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_idunderscore之间的错误讯息为x,我搜索了所有代码,我不知道完全有这个词。

请帮助

1 个答案:

答案 0 :(得分:3)

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

  

请注意,Eloquent根据模型名称假定关系的外键。在这种情况下,假设Phone模型使用user_id外键。如果要覆盖此约定,可以将第二个参数传递给hasOne方法。此外,您可以将第三个参数传递给方法,以指定应该用于关联的本地列

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

class XMLDocument extends Eloquent
{
    // Define table name
    protected $table = 'xml_document';

    public function dateAttribute()
    {
        return $this->hasOne('DateAttribute', 'xml_document_id');
    }
}