Как запросить две таблицы в Laravel - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь запросить две таблицы в Laravel, когда пользователь отправляет форму. Данные хранятся в таблице транзакций, и я также могу обновить таблицу Account, добавив $ transaction-> amt с помощью $ account-> total.

Я пробовал это сделать;

public function store(Request $request)
    {
        $account = DB::table('users')
            ->join('accounts', "users.id", '=', 'accounts.user_id')
            ->select('users.*', 'accounts.*')
            ->first();

        $transaction = new Transaction();
        $data  = $this->validate($request, [
            'baddress'=>'required',
            'package'=>'required',
            'amt'=>'required',
        ]);
        $transaction->username = $account->username;          
        $transaction->baddress = $request->input('baddress');
        $transaction->package = $request->input('package');
        $transaction->amt = $request->input('amt');
        $transaction->fund_option = "Fund";
        $transaction->save();

        $bal= $transaction->amt + $account->total;

        $account->amt_paid = $bal;
        $account->total = $bal;
        $account->save();

        return redirect('/transfer')->with('success', 'Transaction has been made');
    }

но я получил эту ошибку:

Вызов неопределенного метода stdClass :: save ()

Как мне найти лучший метод для этого?

Ответы [ 3 ]

2 голосов
/ 05 мая 2020

$ account - это строка, созданная вашим объединением (users. * И accounts. *), Поэтому это stdClass, а не модель Eloquent. У вас нет метода save ()

, чтобы сделать это, у вас должна быть связь между моделью пользователя и моделью учетной записи:

//Account.php

public function user(){
     return $this->belongsTo("App\User");
}

........

//User.php

public function account(){
     return $this->hasOne("App\Account");
}

, тогда вы можете получить учетную запись от своего пользователя :

$user = User::first();

$account = $user->account;

[....]

$account->amt_paid = $bal;
$account->total = $bal;
$account->save();
1 голос
/ 05 мая 2020

Вы должны использовать вот так. Это просто как

$accountModelUpdate = DB::table('accounts')
      ->where('user_id', $account->id)
      ->update(['amt_paid' => $bal, 'total' => $bal]);
1 голос
/ 05 мая 2020

Эта ошибка возникает из-за того, что $ account не является сбором. метод save () - это метод из коллекции моделей.

если вы хотите обновить, вы можете использовать этот код как.

$accountUpdate = DB::table('accounts')
          ->where('id', $account->id)
          ->update(['amt_paid' => $bal, 'total' => $bal]);

но если вы хотите использовать метод save (), вам нужно вызвать $ account из модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...