无法访问我在 Laravel Blade 中的外键
Posted
技术标签:
【中文标题】无法访问我在 Laravel Blade 中的外键【英文标题】:Cannot get access to my foreign key in Laravel Blade 【发布时间】:2016-02-23 20:47:14 【问题描述】:我在“项目”和“客户”之间有关系。这是我的模型..
class Client extends Model
public function projects()
return $this->hasMany('App\Models\Project');
class Project extends Model
public function clients()
return $this->belongsTo('App\Models\Client');
在我的“项目”控制器索引方法中..
$projects = Project::all();
return view('project/projects', compact('projects'));
然后在我的刀片文件中..
@foreach($projects as $project)
<div class="project">
<div class="status pending"></div>
<p> $project->name </p>
<span> $project->clients->name </span>
</div>
@endforeach
我收到以下错误“尝试获取非对象的属性”。 Laravel 新手,请放轻松。
【问题讨论】:
你在项目表中命名的外键是什么?是clid
或client_id
还是别的什么?
'client_id' 我认为这是惯例
如果您的项目表中有client_id
列,那么代码在制作项目时也应该按预期工作您是否将客户ID 附加到项目中?你能 dd($project) 告诉我们结果吗?
你是这个意思吗?项目 #231 ▼ +timestamps: false #fillable: array:12 [▶] #connection: null #table: null #primaryKey: "id" #perPage: 15 +incrementing: true #attributes: array:14 [▶] #原文:array:14 [▶] #relations: [] #hidden: [] #visible: [] #appends: [] #guarded: array:1 [▶] #dates: [] #dateFormat: null #casts: [ ] #touches: [] #observables: [] #with: [] #morphClass: null +exists: true +wasRecentlyCreated: false
打印original
数组结果
【参考方案1】:
该代码看起来确实可以正常工作(或者因为不同的原因而不能正常工作),但我发现有时您需要做这样的事情才能使关系像您期望的那样工作:
$projects = Project::with('clients')->get();
return view('project/projects', compact('projects'));
还请注意,由于 clients
是 HasMany 关系,因此您需要遍历 $projects->clients
以获取其中之一的 ->name
属性。
【讨论】:
当我以这种方式使用我的控制器时: $projects = Project::with('clients')->get();返回视图(“项目/项目”,紧凑(“项目”));并尝试像这样迭代集合 @foreach($projects->clients as $project) 我收到一个新错误 'Undefined property: Illuminate\Database\Eloquent\Collection::$clients' 这是否意味着这是一个数据库问题'客户和'项目'? 如果您正在迭代$project->clients as $project
,那么$project
将具有Client
模型实例的属性。试试$project->name
,应该是Client
的名字
是的,这是我的想法,我希望看到客户的名称而不是项目的名称,但被抛出了错误。我假设 '$clients' 作为未定义的属性是指 $project->clients
看起来->clients
是未定义的,因为您正在迭代的是一组客户端而不是项目,因此如果您将其更改为@foreach($projects as $project)
,那么$project->clients
应该在循环内可用。
它应该是可用的,但我天真地查看了我的 client_id 行中的所有数字,并没有注意到其中一个字段被设置为 0。当在迭代中到达那个点时,它可以这个数字没有意义,因为它与实际客户无关。【参考方案2】:
在我的项目表的 client_id 列中,其中一个字段设置为 0。因此,当迭代并到达该点时它失败了,这就是我的错误消息所涉及的内容。
【讨论】:
以上是关于无法访问我在 Laravel Blade 中的外键的主要内容,如果未能解决你的问题,请参考以下文章
无法从 Laravel Vue 通讯录项目中的外键表中获取数据
:完整性约束违规:1452 无法添加或更新子行:laravel 迁移中的外键约束失败