无法访问我在 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 新手,请放轻松。

【问题讨论】:

你在项目表中命名的外键是什么?是clidclient_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-&gt;clients 以获取其中之一的 -&gt;name 属性。

【讨论】:

当我以这种方式使用我的控制器时: $projects = Project::with('clients')->get();返回视图(“项目/项目”,紧凑(“项目”));并尝试像这样迭代集合 @foreach($projects->clients as $project) 我收到一个新错误 'Undefined property: Illuminate\Database\Eloquent\Collection::$clients' 这是否意味着这是一个数据库问题'客户和'项目'? 如果您正在迭代$project-&gt;clients as $project,那么$project 将具有Client 模型实例的属性。试试$project-&gt;name,应该是Client的名字 是的,这是我的想法,我希望看到客户的名称而不是项目的名称,但被抛出了错误。我假设 '$clients' 作为未定义的属性是指 $project->clients 看起来-&gt;clients 是未定义的,因为您正在迭代的是一组客户端而不是项目,因此如果您将其更改为@foreach($projects as $project),那么$project-&gt;clients 应该在循环内可用。 它应该是可用的,但我天真地查看了我的 client_id 行中的所有数字,并没有注意到其中一个字段被设置为 0。当在迭代中到达那个点时,它可以这个数字没有意义,因为它与实际客户无关。【参考方案2】:

在我的项目表的 client_id 列中,其中一个字段设置为 0。因此,当迭代并到达该点时它失败了,这就是我的错误消息所涉及的内容。

【讨论】:

以上是关于无法访问我在 Laravel Blade 中的外键的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Laravel Vue 通讯录项目中的外键表中获取数据

Laravel 4迁移问题中的外键

:完整性约束违规:1452 无法添加或更新子行:laravel 迁移中的外键约束失败

如何通过 Laravel 中的外键检索数据?

SQLSTATE [HY000] Laravel 8 中的外键约束格式错误

确保我在 laravel 5 中获得了正确的外键语法