【问题标题】:Undefined property error in one to many一对多中的未定义属性错误
【发布时间】:2018-03-14 19:16:18
【问题描述】:

我正在尝试制作一个应用程序,您可以在其中管理办公材料、发票等。所以我的订单有很多材料和一张发票。

我的材料表有:

id | name | count_all | count_current | price_unit

我的订单表有:

id | count_order | material_id | invoice_id

我的发票表有:

id | number | inc_date | scan_name | sum

我的材料模型看起来像:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Material extends Model
{
    public function order(){
        return $this->belongsTo('Order', 'material_id');
    }
    public function expenditure(){
        return $this->belongsTo('Expenditure');
    }
    protected $fillable = [
        'name', 'count_all', 'count_current', 'price_unit',
    ];
}

我的订单模型如下所示:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    public function invoice(){
        return $this->hasOne('App\Invoice');
    }

    public function material(){
        return $this->hasMany('App\Material');
    }

    protected $fillable = [
        'count_order',
    ];
}

我的 OrderController 看起来像:

<?php

namespace App\Http\Controllers;

use App\order;
use Illuminate\Http\Request;
use DB;
use App\Http\Controllers\Controller;

class orderController extends Controller
{
    /**
     * Show a list of all of the application's orders.
     *
     * @return Response
     */
    public function show()
    {
        $orders = DB::table('orders')->get();

        return view('order', ['orders' => $orders]);
    }

    public function insert(Request $request){

        $order = new order;

        $order->count_order = $request->count_order;

        $order->save();
        return redirect('/order');
    }

    public function edit(order $order){

        return view('edit_order', compact('order'));   
    }

    public function update(Request $request, order $order){
        if(isset($_POST['delete'])){
            $order->delete();
            return redirect('/order');
        }
        else{
            $order->count_order = $request->count_order;

            $order->save();
            return redirect('/order');
       }
    }
}

因此,当尝试访问数据库时,我将在我的路线中使用功能“显示”。

还有我的一块“引起问题”的刀片:

<tbody>
    @foreach($orders as $order)
    <tr>
        <td>{{$order->id}}</td>
        <td>{{$order->material->name}}</td> //this is causing the Undefined property problem when trying to display material name instead of id
        <td>{{$order->invoice_id}}</td> //this should look similar to the one above but since it doesn't work I didn't change it
        <td>{{$order->count_order}}</td>
        <td>    
            <form action="/order/{{$order->id}}">
                <button type="submit" name="edit" class="btn btn-primary">Edycja zamówienia</button>
                {{ csrf_field() }}
            </form>
        </td>
    </tr>
    @endforeach
    </tbody>

因此,当我尝试在刀片中显示材质名称时(如上),它返回以下错误:

Undefined property: stdClass::$materials (View: C:\xampp\htdocs\laravel\petition_app\resources\views\order.blade.php)

【问题讨论】:

  • 试试这段代码,只改先改而不是get,public function show() { $orders = DB::table('orders')->first();返回视图('order', ['orders' => $orders]); }
  • @parthu_panther 当我更改它时,我得到“尝试获取非对象的属性”
  • 也在刀片文件中编辑这一行:- {{$order->material[name]}} ' ->' 用于对象和 '[]'用于数组,由于您的查询结果是数组,因此您需要如上所述更改该行。

标签: php laravel


【解决方案1】:

您需要使用从ordermaterialbelongsTo() 关系。将您的 relationship 更改为:

public function material(){
    return $this->belongsTo('App\Material','material_id');
}

您正在使用query builder,您需要使用laravel eloquent 访问relationship 模型数据。更改您的控制器logic 代码如下:

$orders = Order::all();

【讨论】:

  • 等等...所以我想确定一下 - 我必须更改 Order.php 模型中的函数对吗?
  • 该死的我是个白痴。愿意解释一下我的豌豆大脑做错了什么吗?
  • @korni 请再看看
  • 感谢您的澄清。在创建模型时,我似乎误解了一些东西。那么我需要在哪里放置“hasOne”/“hasMany”? - 因为它们显然不属于 Order.php 模型
  • 让我再澄清一点,当外键在相关表中时使用 hasOne 和 hasMany,例如在您的材料表中与订单表有 hasOne 或 hasMany 关系作为 material_id 我的意思是外键key are in order table 表示从材料角度在相关表中,belongsTo 表示备用
猜你喜欢
  • 2011-05-13
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 2014-11-20
  • 1970-01-01
相关资源
最近更新 更多