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');
我的控制器里有这样的东西:
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');