如何在查询中包括另一个表中的列?

时间:2019-09-28 10:16:08

标签: laravel laravel-5

我有一个名为tables products id sku ean13 price posts id created_at translations id translatable_id translatable_type(it could be post or product) name description locale 的表和另一个名为Payments的表,其字段为Students

在我的控制器付款中,我想检索学生姓名。

我有这个:

name

我如何加入学生桌?

public function index(Request $request)
{
    $user = $request->user();
    $payments = Payment::query()
        ->when($user->hasRole('admin') !== true, function (Builder $query) use ($user) {
            $query->where('email', $user->email);
        })
        ->when($request->has('search'), function (Builder $query) use ($request) {
            $query->where('name', 'like', '%' . $request->input('search') . '%');
        })
        ->paginate(5);

    return view('admin.payments.index', compact('payments'))
        ->with('display_search', $user->hasRole('admin'));
}

我不知道该在哪里放置

修改:

当我添加付款时,我总是有一个出现的那个学生?

enter image description here

我认为问题出在这里?在我的要求???

payment::whereHas('students'

索引刀片

$query->where('name', 'like', '%' . $request->input('search') . '%');
         })->with('students:id,name') // Here
        ->paginate(5);

谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

渴望从关系中加载名称列

$payments = Payment::query()
    ->when($user->hasRole('admin') !== true, function (Builder $query) use ($user) {
        $query->where('email', $user->email);
    })
    ->when($request->has('search'), function (Builder $query) use ($request) {
        $query->where('name', 'like', '%' . $request->input('search') . '%');
    })->with('students:id,name') // Here
    ->paginate(5);

假设您在Payment模型中建立了关系

public function students()
{
    return $this->hasMany('App\Student');
}

payment_id表中的students列中引用id表中的payments作为外键

Schema::create('students', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('name');
    $table->unsignedBigInteger('payment_id')->nullable();
    $table->foreign('payment_id')->references('id')->on('payments');
    $table->timestamps();
});

访问集合中的单个学生

<td>{{ $payment->students->first()->name }}</td> 

希望这会有所帮助