Laravel Отношение со значением Array

Я использую отношения один к одному. Код моей модели:

public function training_type()
{
    return $this->hasone('App\Training_type','id','type');
}

но параметр "id" находится в массиве, я попытался с помощью следующего кода, но не работает:

public function training_type()
{
    return $this->hasone('App\Training_type','types.id','type');
}

кто-нибудь дать мне хорошее предложение.

Структура таблицы Training_type:

"company_id": "company1",
"types": [
{
"id": "1",
"name": "Generic"
},
{
"id": "2",
"name": "Compensation and Benefits"
},
{
"id": "3",
"name": "Labor and Employment Law"
}
],
"updated_at": ISODate("2017-08-10T10:24:40.000+05:30")
} 

другая структура таблицы

{
"company_id": "company1",
"title": "Fire Extinguisher\t",
"content_type": "",
"links": [
{
"link": ""
},
{
"link": ""
}
],
"updated_at": ISODate("2017-08-10T10:24:40.000+05:30"),
"type": "1"
}

2 ответа

Обычная практика передачи foreign_key в отношения:

public function training_type()
{
    return $this->hasone('App\Training_type','foreign_key');
}

Foreign_key из таблицы, которую вы хотите связать.

Я использовал Laravel с mongodb и jenssegers/laravel-mongodb, у меня были следующие документы от моделей:

Пользователь:

{
    "_id" : ObjectId("5bb8013422bb405901652cd9"),
    "name" : "ahmed",
    "email" : "ahmed@admin.com",
    "role" : {
        "name" : "admin",
        "_id" : ObjectId("5bb8013422bb405901652cd2")
    }
}

Роль:

{
    "_id" : ObjectId("5bb8013422bb405901652cd2"),
    "name" : "admin"
}

и я хотел использовать отношение hasOne, чтобы получить роль использования, я сделал это в модели User:

public function role()
    {
        return $this->hasOne('App\Models\Role', '_id', 'role._id');
    }

как вы можете видеть, я вставил роль в виде массива с: id, name в пользовательские документы в БД, когда я тестировал это с:

dd(\Auth::user()->role);

это работало так же хорошо.

Другие вопросы по тегам