Модели Laravel Eloquent не заменяют внешние ключи активных записей на реляционные данные, они только добавляют новое свойство с тем же именем, что и метод, относящийся к классам, и в это свойство он помещает все экземпляры Model полученного результата.запрос, это ТОЛЬКО если вы обращаетесь к свойству, которое называется Eager Loading.
Это объясняется здесь (Официальная документация)
$addressBook = App\AddressBook::find(1); //this only will return the active record with the id 1 and nothig more.
$addressBook->country; // The property "country" does not exist in the AddressBook Classs but eloquent models will return a "fake" property with the value of the result of the query by the method with the same name (only if the method returns an Eloquent Relation).
Это красноречивое поведение является естественным,и это очень умный способ минимизировать количество запросов, Eloquent никогда не будет загружать отношение, если в этом нет необходимости.
Если вы хотите загрузить отношение в наборе моделей одновременномодели извлекаются из БД, которые вам нужны для явного определения отношений, которые вы хотите загрузить.
$addressBook = App\AddressBook::with(['country', 'addresstype', 'anotherRelation'])->get(); // this will retrive all the addressBook models and in each one will attach the relations specified.
[РЕДАКТИРОВАНИЕ] Кроме того, вы должны поместить все пространство имен связанного класса модели в методы отношений, так что вам нужнозаменить как:
class Translation extends Model
{
protected $table = 'translations';
protected $primaryKey = 'translations_id';
protected $keyType = 'int';
public $incrementing = true;
public $timestamps = false;
// ****** You need to put the entire namespace of the Model class
public function country() {
return $this->belongsTo('App\Country', 'translations_id', 'translations_id');
}