Я пытаюсь включить таблицу соединений в свой возврат json с laravel 5.5 с dingo.
У меня такая строчка: return $this->model->where("id_user", " = ", $user_id)->with('typeSpeciality')->get();
И я получил такой результат, таблица специальностей не включена
{
"surname": "Robert",
"first_name": "Lavoie",
"speciality_id": 1,
"email": "eyJpdiI6ImdkUUtqeUFOc0REdmQ0WUF4VUsyTXc9PSIsInZhbHVlIjoiYWFqNXFRQ3JqUmZGRWRnU1BOTVFxam5OSHQrYUVaNE5jNGNnejhTbDdhYz0iLCJtYWMiOiJhZDhkYzc5NzVmYTE4YzNjNjE2N2JkYTFlZWM3MzNkNjU0YTE2OTcxY2JlMjc0NzZlODE4OGI2NWFiNDVkMTg5In0 = ",
"practice_number": "1111",
"gender": "M",
"sms_phone_number": null,
"created_at": "2012-04-25 18:13:10",
"role_id": 6,
"auto_accept": 0
}
специальная таблица не включена в мой json ... я хочу что-то вроде этого
{
"surname": "Robert",
"first_name": "Lavoie",
"speciality": {
"name": "sometext",
"title": "sometext",
}
"email": "eyJpdiI6ImdkUUtqeUFOc0REdmQ0WUF4VUsyTXc9PSIsInZhbHVlIjoiYWFqNXFRQ3JqUmZGRWRnU1BOTVFxam5OSHQrYUVaNE5jNGNnejhTbDdhYz0iLCJtYWMiOiJhZDhkYzc5NzVmYTE4YzNjNjE2N2JkYTFlZWM3MzNkNjU0YTE2OTcxY2JlMjc0NzZlODE4OGI2NWFiNDVkMTg5In0 = ",
"practice_number": "1111",
"gender": "M",
"sms_phone_number": null,
"created_at": "2012-04-25 18:13:10",
"role_id": 6,
"auto_accept": 0
}
Моя функция отношений
public function typeSpeciality()
{
return $this->hasOne('App\Models\TypeSpeciality', "speciality_id","speciality_id");
}
Как лучше всего это сделать?
Нет, в моем возвращении отображается только "speciality_id": 1
Вы определили первичный ключ в таблице специализации типов
Что это показывает, когда вы возвращаете $ this-> model-> where ("id_user", " = ", $ user_id) -> first () -> typeSpeciality; Я пытаюсь понять, правильно ли вы наладили отношения. Есть ли в вашей специальной таблице поле speciality_id?
@pseudoanime Да, в моей специальной таблице есть поле с именем speciality_id
@KevinHoude я добавил ответ, попробуйте его реализовать






Лучший способ получить json-ответ от модели - использовать красноречивые ресурсы. Взгляните на laravel docs красноречивых ресурсов. Они также объясняют, как вы можете добавить отношения к ресурсу.
Измените свои отношения с hasOne на belongsTo вот так
public function typeSpeciality()
{
return $this->belongsTo('App\Models\TypeSpeciality', "speciality_id","speciality_id");
}
Вы можете получить то, что хотите, используя Красноречивый: ресурсы API:
Вам необходимо создать пользователя (при условии, что другая модель - это пользователь) и ресурс TypeSpeciality:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class TypeSpeciality extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return [
'name' => $this->name,
'title' => $this->title
];
}
}
Затем пользовательский ресурс:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
use App\Http\Resources\TypeSpeciality as TypeSpecialityResource;
class User extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return [
'surname' => $this->surname,
'first_name' => $this->first_name,
'speciality' => new TypeSpecialityResource($this->typeSpeciality),
// and the other fields here.
];
}
}
Наконец, в контроллере вы можете сделать это:
use App\Http\Resources\User as UserResource;
function YourMethod() {
$models = $this->model->where("id_user", " = ", $user_id)
->with('typeSpeciality')
->get();
return UserResource::collection($models);
}
Вы можете более четко сформулировать свой вопрос? возвращает ли он в данный момент таблицу специальностей?