W laravel Staram się wykonać prostą relation-ship między dwoma stołem jako users i wallets i wallets bez dostarczania drugiego parametru, ale kiedy próbuję uzyskać dostęp między nimi, otrzymuję błąd:

Stół bazowy lub nie znaleziono widoku: 1146 Tabela "próbka.User_Wallets" nie istnieje

//user
Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('parent_id')->nullable();
    //...

    $table->softDeletes();

    $table->timestamp('created_at')->useCurrent();
    $table->timestamp('updated_at')->useCurrent();
});

//wallets
Schema::create('wallets', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('wallet_name');
    $table->string('wallet_number');
    $table->timestamps();
});

//user_wallet
Schema::create('user_wallet', function (Blueprint $table) {
    $table->foreignId('user_id')->constrained()->cascadeOnDelete();
    $table->foreignId('wallet_id')->constrained()->cascadeOnDelete();
    $table->primary(['user_id','wallet_id']);
});

Model użytkownika:

public function wallet(): BelongsToMany
{
    return $this->belongsToMany(UserWallet::class);
}

Model portfela:

public function user(): BelongsToMany
{
    return $this->belongsToMany(User::class);
}

A według tego poniżej kodu próbuję uzyskać dostęp do portfeli użytkownika:

$this->user_wallets = auth()->user()->with('wallet')->get();
0
DolDurma 3 maj 2021, 10:31

2 odpowiedzi

Najlepsza odpowiedź

W modelu użytkownika: Zmień

public function wallet(): BelongsToMany
{
    return $this->belongsToMany(UserWallet::class);
}

Do tego

   public function wallets(): BelongsToMany
{
    return $this->belongsToMany(Wallet::class,'user_wallet');
}

W twoim modelu portfela:

  public function users(): BelongsToMany ///not user
{
    return $this->belongsToMany(User::class);
}

UWAGA: Nie potrzebujesz modelu konwentetu użytkownika, ponieważ jest to zależność niż Sugestia : W rzeczywistym przykładzie użytkownik ma wiele portfela, a portfel jest tylko do jednego użytkownika, więc relacja jest Hasmana (na wielu)

3
JEJ 3 maj 2021, 08:06

Powinien być mnogi. wallets i users

Model użytkownika:

public function wallets(): BelongsToMany  //not wallet
{
    return $this->belongsToMany(Wallet::class);
}

Model portfela:

public function users(): BelongsToMany //not user
{
    return $this->belongsToMany(User::class);
}
2
Majharul Islam 3 maj 2021, 08:12