早上好,我正在学习与游戏相关项目的模型关系,我有一个与交易模型有很多关系的银行模型
Schema::create('banks', function (Blueprint $table) {
$table->increments('id');
$table->string('name',30);
$table->string('faction',10);
$table->string('region',3);
$table->integer('balance')->unsigned()->nullable();
$table->timestamps();
$table->softDeletes();
});
型号是:
class Bank extends Model
{
use SoftDeletes;
/**
* Establishes a oneToMany relationship with the Transaction
* model
*
* @param
* @return
*/
public function transactions()
{
return $this->hasMany('App\Transaction');
}
}
交易模式是:
Schema::create('transactions', function (Blueprint $table) {
$table->increments('id');
$table->integer('bank_id')->unsigned();
$table->integer('user_id')->unsigned();
$table->integer('operator_id')->unsigned();
$table->string('operation', 128);
$table->integer('amount');
$table->string('note',255)->nullable();
$table->timestamps();
$table->softDeletes();
$table->foreign('bank_id')
->references('id')
->on('banks')
->onUpdate('cascade');
$table->foreign('user_id')
->references('id')
->on('users')
->onUpdate('cascade');
$table->foreign('operator_id')
->references('id')
->on('users')
->onUpdate('cascade');
});
用户架构是:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
交易模型是:
class Transaction extends Model
{
use SoftDeletes;
public function banks()
{
return $this->belongsTo('App\Bank');
}
public function users()
{
return $this->belongsTo('App\User');
}
}
我想在Laravel中实现以下SQL:
SELECT t.amount, t.created_at, b.name, b.region, b.faction, u.name
FROM transactions as t
JOIN users as u
JOIN banks as b ON t.bank_id = b.id
WHERE b.id =1
ORDER by t.created_at DESC
我设法写了这个,它返回所选银行的所有交易,在这种情况下为1(但它最终通过参数传递)
public function show($bank)
{
$transactions = Bank::find($bank)->transactions()
->orderBy('created_at','DESC')
->get();
dd($transactions);
}
但我不知道如何检索我的其余SQL . 任何帮助都会得到一些解释 .
上传此DD的Json的屏幕截图:Json
如何在属性中检索这两个user_id和operator_id的字段user.name?与Eloquent,而不是qBuilder
4 回答
我用这个修复了代码:
我还将Model Transaction关系修改为:
因为他们只返回一个模型 .
你可以做一些事情:
with()
方法将关系加载到模型上 . 然后,您可以将关系视为属性以从中访问信息,例如欲了解更多信息,请查看documentation .
我建议你使用BelongsToMany关系:
把那个方法放在Transaction模型里面,它应该是可行的