【发布时间】:2017-12-09 15:00:33
【问题描述】:
我使用 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_date 和 end_date 字段。当我尝试在我的视图中访问这些属性时,我只会收到“尝试获取非对象的属性”错误。我对 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 | |
+------------+-----------+------+-----+---------+-------+
我没有得到的是为什么当我在模板中输出整个内容时我可以看到我想要的变量的内容,但是当我有选择地只输出它的一部分时,它说它不存在。
【问题讨论】:
-
能把两张表的表结构贴一下吗?
-
这看起来像一个 JSONString,这是刀片所期望的吗?
-
@RiggsFolly 这是当我转储整个变量时 Blade 的输出,所以我无法说明它是如何在内部处理的。我不明白的是为什么我可以看到整个变量,包括我想使用的嵌套对象,但是当我尝试访问该嵌套对象的属性时,我收到一个错误。
标签: php laravel eloquent blade