如何连接两个Laravel表?
使用下面的代码,我看不到任何错误,但是在网页中,电子邮件应该在哪里?它什么也没显示。
从职位表中获取的所有其他信息都是正确的,但是关系数据没有显示。
use App\Post;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
class ViewPostsController extends Controller
{
public function posts()
{
$posts = Post::latest()->get();
$email = DB::table('posts')->join('users', 'posts.user_id', '=', 'users.id')->get();
return view('posts', compact('posts', 'email'));
}
}
@extends('layouts.app')
@section('content')
<div class="container">
@foreach($posts as $post)
<div class="jumbotron">
<div class="col-4">
<img src="/storage/{{ $post->image }}" class="w-100">
</div>
<p> Kategorija: {{ $post->category }}</p>
<p> Apraksts: {{ $post->description }}</p>
<p> Cena: {{ $post->price }}</p>
<p>e-pasts:{{ $post->email }}</p></div>
@endforeach
</div>
@endsection
Schema::create('posts', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->string('category');
$table->string('description');
$table->decimal('price',5,2);
$table->string('image');
$table->timestamps();
$table->index('user_id');
});
用户数据库结构
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
答案 0 :(得分:1)
Laravel中更好的使用关系-https://laravel.com/docs/5.5/eloquent-relationships#one-to-many
这很简单!
答案 1 :(得分:1)
您可以使用雄辩的关系。 在您的Post模型中添加它。
public function user()
{
return $this->belongsTo('App\User');
}
然后在您的控制器中
$posts = Post::with('user')->latest()->get();
然后在您的视图文件中,您可以使用
@extends('layouts.app')
@section('content')
<div class="container">
@foreach($posts as $post)
<div class="jumbotron">
<div class="col-4">
<img src="/storage/{{ $post->image }}" class="w-100">
</div>
<p> Kategorija: {{ $post->category }}</p>
<p> Apraksts: {{ $post->description }}</p>
<p> Cena: {{ $post->price }}</p>
<p>e-pasts:{{ $post->user->email }}</p></div>
@endforeach
</div>
@endsection
您可以在此处了解有关关系的更多信息
https://laravel.com/docs/5.8/eloquent-relationships#one-to-one
答案 2 :(得分:0)
假设您的 $ posts = Post :: latest()已经返回了显示所需帖子所需的查询。您只需要加入users表并告诉查询要选择的字段即可。
示例:
$query = Post::latest();
$query->join('users', 'posts.user_id', '=', 'users.id')
->select(['posts.*', 'users.email']);
$posts = $query->get();
这样,您的 $ posts 变量应包含具有所需信息的对象数组。