Laravel关系:试图获得非对象。预期的行为或错误?

时间:2017-09-27 10:51:12

标签: laravel

首先请让我概述一下我的数据库结构和关系的骨架:

数据库

stores [ country and city are foreign keys to places.id ]
-------------------
id | country | city
-------------------
1  | 1       | 2
2  | 1       | 3

=============================================

places
--------------------
id | google_place_id 
--------------------
1  | pd0nf892nd0s 
2  | icnsy63dnaxa 
3  | 7m34bcs19cnj

=============================================

place_name_map
------------------------------------------
id | place_id | language | value
------------------------------------------
1  | 1        | en       | United Kingdom
2  | 1        | fr       | le Royaume-Uni
3  | 2        | en       | London
4  | 2        | fr       | Londres
5  | 3        | en       | Edinburgh
6  | 3        | fr       | Édimbourg

Store.php

public function country() {
    return $this->hasOne('App\Place','id','country');
}

public function city() {
    return $this->hasOne('App\Place','id','city');
}

//my workaround relationships to the possible bug
public function tCountry() {
    return $this->hasOne('App\Place','id','country');
}

public function tCity() {
    return $this->hasOne('App\Place','id','city');
}

Place.php

public function name() {
    return $this->hasOne('App\PlaceNameMap')->where('language',\App::getLocale());
}

所以,现在说我们要查询构建以在用户的​​区域设置中显示商店的详细信息

$store = Store::where('id',1)
         ->with(['country.name','city.name'])
         ->firstOrFail();
dd($store->country->name->value);

这给了我一个 ErrorException:试图获取非对象的属性

而这

$store = Store::where('id',1)
         ->with(['tCountry.name','tCity.name'])
         ->firstOrFail();
dd($store->tCountry->name->value);

返回'英国'正确地,假设用户区域设置设置为' en'。

当我死亡并在两种情况下转储$store时,它们是相同的,除了显然cou​​ntry = tCountry等。

通常我们可以在渴望加载关系时使用列名,那么为什么这似乎是一个例外呢?这是一个错误还是预期的行为?

0 个答案:

没有答案