【问题标题】:How to include a column from another table in the query?如何在查询中包含另一个表中的列?
【发布时间】:2019-09-28 19:52:20
【问题描述】:

我有一个名为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'));
}

如何加入学生表?

payment::whereHas('students'

我不知道我必须把这条线放在哪里

编辑:

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

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

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

索引刀片

<th>Date payment</th>
<th>Number seance</th>
<th>Price</th>
<th>Total</th>
 <th>Name</th>

</tr>
</thead>
@foreach($payments as $payment)
<tr>
   <td> {{$payment->date_payment->format('d/m/Y') }}</td>
   <td> {{$payment->number_seance}}</td>
   <td> {{$payment->price}}</td>
   <td> {{$payment->total}}</td>
   <td> {{$payment->students->first()->name}}</td> 
   <td>

感谢您的帮助。

【问题讨论】:

  • Payment::with('students');

标签: laravel laravel-5


【解决方案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');
}

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

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> 

希望对你有帮助

【讨论】:

  • 非常感谢 (sahit) 的帮助。我有问题Property [name] does not exist on this collection instance. (View: 我想我的问题在这里? $query-&gt;where('name', 'like', '%' . $request-&gt;input('search') . '%'); })-&gt;with('students:id,name')
  • 不客气 (Bla mziya),编辑您的问题并发布刀片视图
  • 我更新了我的答案,你不是在 foreach 中获取学生姓名吗?每个付款有很多学生没有?
  • 是的,我有一个 foreach,我的最后一个问题是,当我添加付款时,我总是有同一个学生出现???我已经编辑了我的第一条消息。
猜你喜欢
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
相关资源
最近更新 更多