Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Привет, Знающим.
Подскажите правильно ли я понял материал?
Есть таблица firms
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
// названи фирм
class Firm extends Model
{
//
protected $table = "firms";
protected $primaryKey = 'id';
protected $fillable = [
'name'
];
protected $dates =[
'created_at', 'updated_at'
];
}
также есть таблица user_names
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class User_name extends Model
{
//
protected $table = 'user_names';
protected $primaryKey = 'id';
protected $fillable = [
'name_1',
'name_2',
'name_2',
'mob_tel',
'internal_tel',
'email',
'birthday',
'firm_id'
];
protected $dates = [
'created_at', 'updated_at'
];
// Название фирм
public function firm()
{
return $this->belongsTo(Firm::class, 'firm_id');
}
Вот код вывода данных пользователя
public function showUser(int $id)
{
$objUser_name = new User_name();
$user_names = $objUser_name->where('id', $id)->get();
$user_names->firm_id = $objUser_name->find($id)->firm->name;
dd($user_names->firm_id );
}
Меня интересует правильно ли я использую "зависимости" или существут еще проще вариант для вывода названия фирмы ?
Не в сети
По соглашениям модели пишутся в CamelCase, т.е. UserName. Это хороший тон.
public function firm()
{
return $this->belongsTo(Firm::class, 'firm_id');
}
т.к. у класса Firm указана таблица firms, laravel предполагает (убирая множественное число "s" из firms), что внешний ключ может быть firm_id, т.е. firm_id указывать необязательно, но, это совсем не принципиально.
$user_names->firm_id = $objUser_name->find($id)->firm->name;
dd($user_names->firm_id );
для чего здесь присваивается в $user_names атрибут firm_id, если он уже должен быть и более того, какой смысл присваивать в firm_id name??
Для использования QueryBuilder, не обязательно создавать новый экземпляр класса модели, можно так:
public function showUser(int $id)
{
$userNames = User_name::query()->where('id', $id)->firstOrFail();
dd($userNames->firm_id );
}
По большому счету - твой код должен работать и отношения используются корректно.
Изменено covobo (08.02.2018 11:56:51)
Не в сети
Ну теперь это явно облегчает работу. А то я намудрил "букв", а толку мало.
Спасибо!
Не в сети
И еще один вопрос. Что бы получить название фирмы мне надо обратится
$userNames->firm->name;
Правильно ли будет если сделать так?
$userNames->firm = $userNames->firm->name;
или это с точки зрения laravel не логично и не правильно?
Не в сети
Задам тебе встречный вопрос.
Почему у тебя возникает желание переопределить переменную firm (а на самом деле определить, т.к. ->firm отлавливается через __get)?
Если тебе понадобится еще что-то, кроме названия, как ты предполагаешь это сделать?
Первый вариант - правильный, так ты получишь название фирмы (если фирма есть).
Второй вариант - делает тоже самое, но какой смысл в этом - я не знаю. Ты ведь фактически определил переменную firm и больше не сможешь обратиться к фирме, как к модельке.
Изменено covobo (09.02.2018 01:11:55)
Не в сети
ОК, я понял свою ошибку.
Правильно не переопределять ... Я просто еще не дошел до надобности использовать какие-то дополнительные данные из массива.
Не в сети
Страницы 1