DieZz
@DieZz

Как использовать отношения в моделях Laravel?

Читаю документацию Laravel. В модели Eloquent ORM можно определить отношения с другими моделями. Не могу понять как использовать эти отношения. Например есть две таблицы:
1. "Object" с полями:
-id(int,primary)
-name(varchar)
-type(int)
2. "Types" c полями:
-id(int,primary)
-type_name(varchar).
Как установить отношение таким образом чтобы при {{$Object->type}} выводило не число, а type_name ?
  • Вопрос задан
  • 695 просмотров
Решения вопроса 1
Если Вы никогда этого не делали и БД к тому же только-только формируете, то следуйте рекомендованным конвенциям по именованию таблиц и столбцов БД.
Вот так будет проще:

1. "Object" с полями:
-id(int,primary)
-name(varchar)
-type_id(int)
2. "Types" c полями:
-id(int,primary)
-name(varchar).

Далее, в модели Object пишите связь belongsTo():

public function type()
{
    	return $this->belongsTo('App\Type');
}


А в Type - связь hasMany:

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


И должно всё заработать.

INT Вам выдаётся так как Вы связь и столбец проименовали одинаково. Отдаётся не связь, а содержание одноимённого столбца...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
zenwalker
@zenwalker
0xABADBABE
Ответ написан
Комментировать
DieZz
@DieZz Автор вопроса
Немного не понимаю я.

есть модель :
class Object extends Model {

	protected $table = 'object';

	public function type(){
    	return $this->belongsTo('App\Type', 'id');
  	}	

}

class Type extends Model {

	protected $table = 'types';

	public function type_name(){
    	return $this->hasMany('App\Object','type','id');
	}

}

$obj = Object::find(1);
var_dump($obj->type);

Результат: string(1) "1"

Переформулирую вопрос немного: как с помощью Eloquent ORM выполнить запрос подобного рода:
SELECT id,name, (SELECT type_name FROM Types WHERE id=object.type) as type FROM object where id=1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы