早上好,尝试用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
并且如您所见,它已在上面声明,我想这是一个语法问题,希望您能对我有所帮助。
谢谢,问候。
答案 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()
返回具有整个结果的数组。
答案 2 :(得分:0)
不用担心。很容易解决。您已指定要搜索的列。但是Eloquent并没有真正执行您的查询。
如果使用dist_mat[i][j]=Integer.MAX_VALUE
,则必须指定:
您想返回一个Model行吗?如果是这样,您可以使用Model::where('col', $value')
p.s.它会返回找到的第一个名字,因此,如果您尝试使用Bob查找名字,并且您有记录first()
,它将首先返回Bob1, Bob2, Bob3
。
是否要返回查询中的所有行,可以使用Bob1
。您必须get()
收集您的收藏才能访问每个实例上的房地产。
然后,您可以访问您的关系属性。
祝你好运!
答案 3 :(得分:0)
基于@HCK的答案已经说明了如何执行查询结果。在这里,我只想改善直接返回列值的方法。
$response = Colonia::where('codigo_postal', $codigo_postal)
->value('city');