如何获得一对一关系的结果

How to get result of one to one relationship

我正在使用 Laravel 8 制作一个基本的在线订购系统。

并且在这个项目中,每一个订单都是在已经登录的用户的一个用户内提交的。

因此 users table 和 orders table.[=27= 之间存在 一对一 关系]

因此,我将这些添加到模型中:

Order.php:

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

User.php:

public function order()
    {
        return $this->belongsTo(Order::class);
    }

现在为了获得 table 的结果以显示订购者的用户名,我在 Controller 中编写了以下代码:

public function awaiting()
    {
        $orders = Order::with('user')->where('user_id', '!=', NULL)->latest()->paginate(20);
        return view('admin.orders.awaiting', compact('orders'));
    }

然后在 Blade:

@foreach($orders as $order)
<tr>
    <td>{{ $order->user->name }}</td>
    <td>{{ $order->description }}</td>
    <td>{{ $order->dimensions }}</td>
    <td>{{ $order->color }}</td>
    <td>{{ $order->material }}</td>
    <td>{{ $order->title }}</td>
    <th scope="row">{{ ++$menuCounter }}</th>
</tr>
@endforeach

但这是错误的,因为它在 users table(不存在)处搜索 order_id

那么问题来了,如何根据存储在orderstable.

中的user_id显示下单用户的用户名

更新 #1:

Orders 迁移:

Schema::create('orders', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->string('material');
            $table->string('color');
            $table->string('dimensions');
            $table->string('description')->nullable();
            $table->tinyInteger('user_id')->unsigned()->nullable();
            $table->timestamps();
        });

Users 迁移:

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->tinyInteger('adm')->unsigned()->nullable();
            $table->rememberToken();
            $table->timestamps();
        });
    }

您可以使用 whereHas 而不是检查 null。尝试更改。

$orders = Order::with('user')->whereHas('user')->latest()->paginate(20);

你们关系不对所以

Order.php:

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

User.php:

public function order()
{
   return $this->hasOne(Order::class);
}