我无法使用Laravel进行查询

时间:2018-11-22 18:24:25

标签: laravel laravel-5 eloquent laravel-query-builder

早上好,尝试用Eloquent创建简单查询时遇到麻烦。

这是小殖民地模型:

class Colonia extends Model
{
    protected $table = 'catalogo_colonias';   

    public function city()
    {
        return $this->belongsTo('App\City', 'ciudades_id');
    }
}

如果我愿意。

$response = Colonia::find(1)->city;

我得到了答复,但我不想通过id查找,我正在尝试做出类似的事情。

$response = Colonia::where('codigo_postal', $codigo_postal)->city;

但是它抛出了一个错误。

  

未定义的属性:Illuminate \ Database \ Eloquent \ Builder :: $ city

并且如您所见,它已在上面声明,我想这是一个语法问题,希望您能对我有所帮助。

谢谢,问候。

4 个答案:

答案 0 :(得分:5)

当您这样做:

var displayList = arrayListOf<String>()
numberDisplay(*displayList)

$response = Colonia::find(1)->city; 方法将返回查询结果,在本例中为find()表的第一个对象。一个对象,该对象具有您定义的所有属性,例如catalogo_colonias关系。

现在,当您改用where()方法时,它仍未检索到关系对象,因为在某些情况下,您将希望继续限制查询。而是返回Query Builder类的实例。这就是为什么它会引发错误:

city

要获取结果,您需要附加$response = Colonia::where('codigo_postal', $codigo_postal) // return query builder ->city; // this property isn't defined in the builder, hence, the error. (以获取与查询匹配的所有结果)或get()等。

first()

答案 1 :(得分:0)

您的代码中的问题是Colonia::where()返回了查询生成器。您需要使用方法first()将其提取,例如:

$response = Colonia::where('codigo_postal', $codigo_postal)->first()->city;

您可以使用两种方法从查询中提取信息:first()get()first()仅返回找到的第一个元素,而get()返回具有整个结果的数组。

我建议您阅读Laravel Query Builder - Where Clauses

答案 2 :(得分:0)

不用担心。很容易解决。您已指定要搜索的列。但是Eloquent并没有真正执行您的查询。

如果使用dist_mat[i][j]=Integer.MAX_VALUE,则必须指定:

  1. 您想返回一个Model行吗?如果是这样,您可以使用Model::where('col', $value') p.s.它会返回找到的第一个名字,因此,如果您尝试使用Bob查找名字,并且您有记录first(),它将首先返回Bob1, Bob2, Bob3

  2. 是否要返回查询中的所有行,可以使用Bob1。您必须get()收集您的收藏才能访问每个实例上的房地产。

然后,您可以访问您的关系属性。

祝你好运!

答案 3 :(得分:0)

基于@HCK的答案已经说明了如何执行查询结果。在这里,我只想改善直接返回列值的方法。

$response = Colonia::where('codigo_postal', $codigo_postal)
    ->value('city');

Laravel Documentation