【问题标题】:How to retrieve only one record with eager loading in Laravel 5?如何在 Laravel 5 中通过急切加载仅检索一条记录?
【发布时间】:2019-03-16 04:45:06
【问题描述】:

我有 Eloquent 模型 User 与关系 languages

class User extends Model {

  // ... some code 

  public function languages()
  {
     return $this->belongsToMany(Language::class);
  }
}

我的多对多关系迁移数据透视表

public function up()
{
    Schema::create('language_user', function (Blueprint $table) {
        $table->unsignedInteger('user_id');
        $table->unsignedInteger('language_id');
        $table->primary(['user_id', 'language_id']);
    });
}

在控制器中,我尝试获取我的用户

class UserController extends Controller
{
     public function show(User $user)
     {
        return response()->success($user->with('languages')->get());
     }
}

但不幸的是,我得到的不是一个用户,而是 Users 的结果数组 我怎样才能只用他的语言查询一个用户记录?

【问题讨论】:

  • 你可以使用pluck() return response()->success($user->with('languages')->pluck());
  • 数组是否包含多个用户?
  • @TimSch 是的。是的,这就是问题
  • 我记得只有集合需要 get() 方法。您访问单个用户,此处不需要 get()。没有它你会得到什么?
  • 您可以使用load 懒加载语言relations: $user->load('languages');

标签: laravel laravel-5 eloquent


【解决方案1】:

使用 Laravel 延迟加载:

来自docs:

有时您可能需要在父级之后急切加载关系 模型已被检索。

在你的情况下:

class UserController extends Controller
{
     public function show(User $user)
     {
        return response()->success($user->load('languages'));
     }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    相关资源
    最近更新 更多