Laravel如何从另一张桌子拿走?

时间:2018-06-18 18:07:05

标签: php mysql laravel

我有一张名为" logs"使用自定义列" auth_id"我有另一个名为" users"具有相同的列名" auth_id"和列"用户名"。

我如何从" logs"用" logs.auth_id"并通过"用户"获取用户名表

现在我的结果是:

$match->messages = DB::table('logs')->where('match_id', '=', $match->match_id)->get();

刀片:

@foreach ($match->messages as $message) 

{{ $message->auth_id }}: 
{{ $message->message }}

示例:现在我使用{{$ message-> auth_id}}获取AUTH5556,但我需要从"用户"获取USERNAME表{{$ message-> auth_id}}

2 个答案:

答案 0 :(得分:1)

不要使用连接,这是使用像laravel(eloquent)这样的东西的全部原因。您需要定义模型之间的关系。

在您的用户模型上,您将定义一个方法

public function logs()
{
    return $this->hasMany(Log::class);
}

在您的日志模型上

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

现在,您需要确保在日志表中有一个user_id列。

现在您可以简单地获取日志

$log = Log::find($id);

您可以检索有关拥有该日志的用户的任何信息,例如刀片文件中的示例。

{{ $log->user->username }}

要获取反向信息,您需要迭代结果,因为用户可以拥有许多日志。例如:

$user = User::find($id);

然后你在刀片上做了类似的事情

@foreach($user->logs as $log)
    {{ $log->column_on_log_you_want }}
@endforeach

您还需要考虑急切加载。

这使得laravel如此干净和美观。

阅读文档

答案 1 :(得分:-1)

您需要在查询中使用JOIN来获取users表中的用户名。这是link to Laravel manual