Laravel Eloquent Отношения без ключа - PullRequest
0 голосов
/ 30 октября 2018

Как мне загрузить другую модель в eloquent? Отношения это не совсем отношения в традиционном смысле, это требование.

У меня есть таблица users и таблица target_types. Каждый user будет иметь все одинаковые target_types. Таким образом, все, что target_types присутствует в таблице target_types, будет применяться ко всем users. Поэтому нет необходимости в типе отношений с внешним ключом.

Я понимаю, что мог бы пойти по пути построителя запросов, однако в идеале я хотел бы иметь возможность сделать что-то вроде:

User::with('target_types')->get();

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вы можете «подделать» отношения в пользовательской модели следующим образом:

//in User model
public function targetTypes(){

    return TargetType::where("deleted_at", "<>", "NULL");

}

Затем вы можете вызвать его с пользователем в контроллере следующим образом:

User::with('targetTypes')->get();
0 голосов
/ 30 октября 2018

Как * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.

приложение / Http / Контроллеры / SomeCoolController.php

public function index(Request $request)
{
    // get your users
    $users = User::all();
    // get your target types
    $targetTypes = TargetType::all();


    // return them to your front-end
    return response([
        'data' => [
            'users' => $users,
            'target_types' => $targetTypes
        ]
    ], 200);

    // or in case you have a view
    // return view('my_cool_view', ['users' => $users, 'targetTypes' => $targetTypes]);

}

Альтернативный

Вы говорите, что targetTypes будет одинаковым для всех пользователей. В случае, если эти типы не меняются очень часто. Почему бы не хранить их внутри модели?

приложение / User.php

public function getTargetTypesAttribute()
{
    return ['my', 'list', 'of, 'target', 'types'];
}

Тогда вы можете использовать его при запросах для ваших пользователей:

$user = User::first();
dd($user->target_types);
// this will output the list of target types.
...