【问题标题】:laravel relationship method working incorectlaravel 关系方法工作不正确
【发布时间】:2022-12-20 01:38:27
【问题描述】:

模型用户中的方法

public function news()
{
    return $this->hasMany(News::class);
}

模型消息中的方法

public function user()     
{    
    return $this->belongsTo(User::class);
};

工作

$user=User::all();
dd($user[0]->news->user->name);

不行

$news=News::all();
dd($news[0]->user->name);

但是我得到了数组对象“新闻”

【问题讨论】:

  • 它应该是$user[0]->name而不是$user[0]->news->user->name,但除此之外,一切似乎都应该有效。你能发布dd(news[0]);的结果吗?

标签: php laravel


【解决方案1】:

回答原来的问题:

您必须将变量传递给包含的刀片文件:

@foreach($news as $newsCard)
    @include('includes.news.card', ['newsCard' => $newsCard])
@endforeach
{{$news->links()}}

回答更新的问题:

尝试预先加载关系(更有效):

$news=News::with('user')->all();

或者每次加载查询:

$news[0]->user()->name

如果 news 表中的外键名为 user_id,它应该可以工作。否则,您必须在模型关系中明确指定外键和本地键。

【讨论】:

  • 模板看到对象,但不能在一个页面上使用方法,但可以在另一页上使用。 newsCard->id 在两个页面上工作,但 newsCard->user->name 不工作
  • 你试过了吗?
  • 是的,我尝试了这个并得到错误'尝试在 null 上读取属性“用户”',这个错误我得到并且没有 ['newsCard' => $newsCard]
  • 编辑您的问题,添加此刀片文件“includes.news.card”的代码
  • 好的,不工作,在控制器中,奇怪
【解决方案2】:

试试这个方法

<div class="container">
@foreach ($users as $user)
    {{ $user->name }}
@endforeach
</div>
 
{{ $users->links() }}

Laravel 分页 https://laravel.com/docs/9.x/pagination可以帮到你。

【讨论】:

  • 发布问题后我看到了但忘了编辑,但问题不在其中
【解决方案3】:

原因找到了,这个新闻获取不到它的用户,因为他已经从数据库中删除了

【讨论】:

    猜你喜欢
    • 2015-03-22
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    相关资源
    最近更新 更多