首页 文章

无法访问刀片模板中的嵌套对象

提问于
浏览
1

我正在使用Laravel,Eloquent用于查询,而Blade用于模板化 .

以下是我正在使用的模型:

namespace App;

use Illuminate\Database\Eloquent\Model;

class DistrictCharge extends Model
{
    protected $fillable = [ 'plan_year', 'location_id', 'meal_id', 'charge_id', 'price' ];

    public function plan_year() {
        return $this->belongsTo('App\PlanYear', 'plan_year');
    }
}


namespace App;

use Illuminate\Database\Eloquent\Model;

class PlanYear extends Model
{
    protected $fillable = [ 'year', 'start_date', 'end_date' ];

    public $primaryKey = 'year';
}

相关控制器代码:

public function index()
{
    $district_charges = DistrictCharge::with('plan_year')->get();

    return view('district-charges/index', compact(
        'district_charges',
    ));
}

在我的模板中,当我这样做时:

{{ $district_charges[0] }}

我得到这个(为了可读性而缩进):

{
    "id":1,
    "created_at":"2017-01-23 21:33:53",
    "updated_at":"2017-01-23 21:33:53",
    "plan_year": {
        "year":2016,
        "start_date":"2015-07-01",
        "end_date":"2016-06-30",
        "created_at":"2017-01-23 21:03:08",
        "updated_at":"2017-01-23 21:03:08"
    },
    "location_id":"2",
    "meal_id":"1",
    "charge_id":"4",
    "price":"175"
}

这是有道理的; plan_year 字段填充了它引用的数据库条目的内容,完全按照我的意愿填充 . 但是当我这样做时:

{{ $district_charges[0]->plan_year }}

我只是得到 2016 ,一个非对象 . 这是一个问题,因为我查询以填充 plan_year 字段,因为我需要为我的视图附带的 start_dateend_date 字段 . 当我尝试在我的视图中访问这些属性时,我得到一个'trying to get properties of a non-object'错误 . 我对Laravel,Eloquent或Blade并不熟悉,所以任何帮助都会很棒 .

编辑:

表格结构如要求:

district_charges
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| created_at  | timestamp        | YES  |     | NULL    |                |
| updated_at  | timestamp        | YES  |     | NULL    |                |
| plan_year   | int(11)          | NO   |     | NULL    |                |
| location_id | int(11)          | NO   |     | NULL    |                |
| meal_id     | int(11)          | NO   |     | NULL    |                |
| charge_id   | int(11)          | NO   |     | NULL    |                |
| price       | int(11)          | NO   |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+

plan_years
+------------+-----------+------+-----+---------+-------+
| Field      | Type      | Null | Key | Default | Extra |
+------------+-----------+------+-----+---------+-------+
| year       | int(11)   | NO   |     | NULL    |       |
| start_date | date      | NO   |     | NULL    |       |
| end_date   | date      | NO   |     | NULL    |       |
| created_at | timestamp | YES  |     | NULL    |       |
| updated_at | timestamp | YES  |     | NULL    |       |
+------------+-----------+------+-----+---------+-------+

我没有得到的是为什么当我在模板中输出整个内容时,我可以看到我想要的变量的内容,但是当我选择性地输出它的一部分时,它表示它不存在 .

2 回答

  • 1

    表中没有任何id,因此请将以下类成员放在PlanYear模型中

    protected $primaryKey = 'year';
    

    此外,将您的关系方法更改为没有下划线 - 例如, year()

  • 0
    public function plan_year() {
        return $this->belongsTo('App\PlanYear', 'plan_year','year');
    }
    

    我相信一年是你桌上的主要钥匙

    我相信你的表中有数据,否则你会得到致命的错误

    $district_charges[0]->plan_year->start_date
    

    要显示结束日期,您需要执行相同的操作

    $district_charges[0]->plan_year-> end_date
    

相关问题