Laravel: несколько столов в одной модели - PullRequest
0 голосов
/ 10 июня 2018

У меня есть следующая модель для пользователей:

class User extends Authenticatable
{
    use Notifiable;
    protected $table = 'login_info';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function getDashboards()
    {
        return \DB::table('dashboard')
               ->select('type')
               ->where('id', Auth::id())
               ->orderBy('column', 'asc')
               ->get();
    }
}

Пользователи имеют различную информацию во многих таблицах

  • информация о пользователе, такая как имя, офис, панель мониторинга, 2FA и т. Д.

Способ, которым я делаю это сейчас "наилучшая практика" (например, функция getDashboards) для получения информации из разных таблиц?

Или я должен создать модельдля каждой из таблиц, а затем «соединить их» (hasMany, belongsToMany и т. д.) для каждой из таблиц?

РЕДАКТИРОВАТЬ:

Сейчас я использую модели, но результатом запроса всегда является пустой массив.

class Dashboard extends Model
{
    protected $table = 'dashboard';

    public function user()
    {
        return $this->belongsTo(User::class,'user_id','id');
        //user_id
    }
}

user_id - это идентификатор пользователя, который используется в таблице login_info.

А в классе User у меня есть:

public function dashboards()
{
    return $this->hasMany(Dashboard::class,'id','user_id');
}

В контроллере входа у меня есть:

$user = \App\User::find(1);
$user->dashboards;

Кто-нибудь видит, в чем может быть проблема?

Спасибо за любую помощь!

Ответы [ 3 ]

0 голосов
/ 10 июня 2018

Более подход Laravel состоит в том, чтобы скорее создать связанную модель Dashboard и использовать красноречивые отношения, а также использовать функции ORM.Нет ничего плохого в том, чтобы включить orderBy в отношения, если вам всегда нужно упорядочить этот столбец.

class User extends Authenticatable
{
    public function dashboards()
    {
        return $this->hasMany(Dashboard::class)
            ->orderBy('column', 'asc');
    }
}

class Dashboard extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
0 голосов
/ 10 июня 2018
public function dashboards()
{return $this->hasMany(\App\Dashboard::class);
}

И в вашей модели Dashboard вы делаете это так

protected $casts = [
        'user_id' => 'int',
    ];
public function user()
    {
        return $this->belongsTo(\App\User::class);
    }
0 голосов
/ 10 июня 2018

Вам не нужно ничего делать в модели!Просто обратитесь к модели в контроллере, например:

User::where('id', Auth::id())->pluck('type');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...