【问题标题】:Cannot get access to my foreign key in Laravel Blade无法访问我在 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数组结果

标签: php mysql html laravel-5 blade


【解决方案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。因此,当迭代并到达该点时它失败了,这就是我的错误消息所涉及的内容。

【讨论】:

    猜你喜欢
    • 2020-01-12
    • 2017-08-31
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2015-10-24
    • 2016-05-20
    • 2022-11-11
    相关资源
    最近更新 更多