Laravel 中关系的奇怪问题

Weird problem with relationships in Laravel

我的控制器里有这样的东西:

namespace App\Http\Controllers;

use App\Invoice;
use Illuminate\Http\Request;

class PaymentController extends Controller
{
    public function pay( Invoice $invoice ) {
        $product = $invoice->product;

        return $invoice;
    }
}

我正在使用 Eloquent 关系,当我 return 发票模型时,Laravel 将其加入父关系(产品)!为什么会这样?

它在您 return 发票时添加 product 关系的原因是因为您正在调用以下内容:

$product = $invoice->product;

这是因为 Laravel 在您调用它时加载关系并将其与发票模型一起存储。这样一来,如果您在该对象的同一实例上再次调用 product,它不会 运行 另一个数据库查询。

因此,它 return 是发票模型及其已加载的关系。要么不加载产品关系(取决于您是否需要),要么 IIRC 您可以在 return 时隐藏关系,因此它应该只是 return 发票模型。你应该能够做这样的事情:

return $invoice->makeHidden('product');