我在数据库中有一张分配了他们所在城市 id 的人员表,如下所示:
在Person模型中,我建立了人和城市之间的关系:
class Persona extends Model
{
public function ciudad() {
return $this->belongsTo(Ciudad::class, 'ciudad');
}
}
在控制器中,我使用城市列表查询所有人:
class PersonaController extends Controller
{
public function index()
{
$personas = Persona::with('ciudad')->orderBy('id')->get();
}
}
当我dd($personas)
在控制器中执行 a 时,我检查关系是否正确建立:
在那里我们可以看到用户属于巴亚尔塔港市(由918
Persons 表中的 id 返回)。好吧,在视图中,我遍历了所有获取数据的人,包括城市:
@foreach($personas as $persona)
<tr>
[...]
<td>{{ $almacen->ciudad }}</td>
[...]
</tr>
@endforeach
这就是它的样子...
使用$persona->ciudad
仅返回 ID。
如果我使用它$persona->ciudad()->nombre
返回错误(“未定义属性:Illuminate\Database\Eloquent\Relations\BelongsTo::$name ”)。
如果我使用$persona->ciudad->nombre
它返回错误(“尝试获取非对象的属性'名称' ”)。
我如何获得城市的名称?
您不能为已经是列名称的关系使用名称,否则您将始终收到列的值,更改其中一个,这里最简单的是关系的名称:
然后你会得到这样的相关城市:
或者它的属性之一:
注意:但是如果你想遵循约定,你应该用 替换列名
ciudad_id
,所以关系是:你会得到这样的相关城市:
或者它的属性之一:
奖励:如何更改列的名称。
创建迁移:
在迁移中:
运行迁移: