2 回答
TA贡献1817条经验 获得超6个赞
首先,您需要定义您的关系。看起来 aUser有很多Messages,所以:
消息.php
public function sender()
{
return $this->belongsTo(User::class, 'from');
}
public function receiver()
{
return $this->belongsTo(User::class, 'to');
}
注意:这里我使用了两个带有自定义外键的belongsTo关系,这是因为 Laravel{model}_id默认会查找列,但这样 Laravel 将知道要搜索的列。
然后在您的控制器中,您可以返回您的消息,但Eager Loading您需要的关系以便能够在您的视图中显示它们:
use App\Message;
use App\User;
class MessagesController extends Controller
{
public function index()
{
$messages = Message::with(['sender', 'receiver'])->get();
return view('admin.messages')->with('messages', $messages);
}
}
那么在你看来:
<tbody>
<tr>
@foreach ($messages as $message)
<td>
{{ $message->sender->name}}
</td>
<td>
{{ $message->receiver->name}}
</td>
// ...
@endforeach
</tr>
</tbody>
观察
鉴于主键是正整数,请将外键类型更新为:
Schema::create('messages', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('from'); // <-----
$table->unsignedInteger('to'); // <------
$table->mediumText('text');
$table->integer('status');
$table->timestamps();
});
这将帮助您避免将来出现一些麻烦。此外,在 Laravel 中5.8,主键默认为 Big Increments。所以如果你使用这些,你的外键应该是这样的:$table->unsignedBigIncrement('column_name');
TA贡献1871条经验 获得超13个赞
在您的消息模型中,您必须定义关系。我们定义了 from 和 to 关系,这些将需要一个额外的参数来定义键名,因为它不是您遵循的 Laravel 标准的一部分。
public class Message
{
public function from()
{
return $this->belongsTo(User::class, 'from');
}
public function to()
{
return $this->belongsTo(User::class, 'to');
}
}
完成此操作后,您将能够执行类似的操作。
public function index()
{
return view('admin.messages')->with('messages', Message::all())
}
如果像这样访问用户 $message->from,您将获得一个对象。如果您访问该方法,您将获得查询构建器,例如 $message->from()。
现在您可以在刀片模板中使用它。
<tbody>
<tr>
@foreach ($messages as $message)
<td>
{{ $message->from->name}}
</td>
<td>
{{ $message->to->name}}
</td>
....
@endforeach
</tr>
</tbody>
- 2 回答
- 0 关注
- 139 浏览
添加回答
举报