【问题标题】:Laravel - cannot use Eloquent model methodLaravel - 不能使用 Eloquent 模型方法
【发布时间】:2017-05-25 04:41:42
【问题描述】:

distributor_requisition_items 包含以下列:requisition_id,product_id,measuring_unit_id,quantity

在模型DistributorRequisition.php中,我有:

   class DistributorRequisition extends Model
    {

       public function items()
        {
            return  $this->belongsToMany('App\Product','distributor_requisition_items',
'requisition_id','product_id')->withPivot('measuring_unit_id','quantity');
        }


    }

在我的控制器中:

    class CurrentInventoryController extends Controller
    {
            public function distributor_inventory(Request $request)
                {

                     $distributor_requisition=DistributorRequisition::get();

                     $distributor_requisitions_all= $distributor_requisition->items; 
// this line produces an error



                     return view('admin.current_inventory.distributor-inventory',
        compact('distributor_requisitions_all','stores',.....));

    }
    }

distributor-inventory.blade.php,我有:

    @foreach($distributor_requisitions_all as $aP)

      {{$aP->items->measuring_unit_id}}

    @endforeach

我收到以下错误:

Collection.php 第 1527 行中的异常:此集合实例上不存在属性 [items]。

在 Collection.php 第 1527 行中 Collection->__get('items') 在 CurrentInventoryController.php 第 64 行

控制器中的第 64 行有: $distributor_requisitions_all= $distributor_requisition->items;

那么如何在控制器中使用 eloquent 模型方法 items 以便我可以访问视图中的 distributor_requisitions_all 变量以从中提取值呢?

【问题讨论】:

    标签: php database laravel laravel-eloquent


    【解决方案1】:

    使用 with() 方法而不是 get()。

    public function distributor_inventory(Request $request)
    {
        $distributor_requisition=DistributorRequisition::with('items');
        return view('admin.current_inventory.distributor-inventory', ['distributor_requisitions_all' => $distributor_requisition]);
    }
    

    【讨论】:

    • 在 FF 中,页面只是空白,Chrome 显示This page isn’t working localhost is currently unable to handle this request. HTTP ERROR 500
    • 好吧,把它设为 dd($distributor_requisition) 并告诉我结果。
    • 在哪里制作?
    • 在这一行下` $distributor_requisition=DistributorRequisition::with('items');` dd($distributor_requisition)
    • 这是我得到的:Builder {#498 ▼ #query: Builder {#490 ▶} #model: DistributorRequisition {#493 ▶} #eagerLoad: array:1 [▶] #localMacros: [] #onDelete: null #passthru: array:11 [▶] #scopes: [] #removedScopes: [] }
    【解决方案2】:

    $distributor_requisition=DistributorRequisition::get(); 是 Model DistributorRequisition 的集合,而 items 是模型内部的一个方法,这就是它给您错误的原因..您不能直接从集合中调用 Model 方法..并解决您的问题问题你要做的是

    在你的函数中

    public function distributor_inventory(Request $request)
    {
        $distributor_requisition=DistributorRequisition::get();
        return view('admin.current_inventory.distributor-inventory',
        compact('distributor_requisition','stores',.....));
    }
    

    在你看来

    @foreach($distributor_requisition as $aP)
    
        // {{ $aP->items->measuring_unit_id }}
        // that will give you error since $aP->items is another collection of many model item what you can do is add another loop
    
        @foreach($aP->items as $item)
            $item->pivot->measuring_unit_id }}
        @endforeach
    
    @endforeach
    

    【讨论】:

    • 我收到了错误:ErrorException in Collection.php line 1527: Property [measuring_unit_id] does not exist on this collection instance. (View: C:\xampp\htdocs\celero\resources\views\admin\current_inventory\distributor-inventory.blade.php) in Collection.php line 1527
    • distributor_requisition_items 表中有那个字段吗?
    • 是的,我在distributor_requisition_items 表中有那个字段?
    • 你试过$aP->items->pivot->measuring_unit_id吗?
    • 希望对您有所帮助.. :)
    猜你喜欢
    • 2016-06-21
    • 2018-12-13
    • 1970-01-01
    • 2014-11-05
    • 2016-09-24
    • 2021-10-21
    • 1970-01-01
    • 2016-08-17
    • 2017-01-12
    相关资源
    最近更新 更多