我在laravel项目中有一个有效的查询。有没有办法优化或缩短这段代码?
$transaction = DB::connection('mysql')->table('pwn_transaction')
->join('pwn_transaction_has_details', 'pwn_transaction.ticket_number', '=', 'pwn_transaction_has_details.pwn_transaction_ticket_number')
->join('pwn_transaction_details', 'pwn_transaction_has_details.pwn_transaction_details_id', '=', 'pwn_transaction_details.id')
->join('pwn_transaction_has_transaction_items', 'pwn_transaction.ticket_number', '=', 'pwn_transaction_has_transaction_items.pwn_transaction_ticket_number')
->join('pwn_branch_has_transaction', 'pwn_transaction.ticket_number', '=', 'pwn_branch_has_transaction.pwn_transaction_ticket_number')
->join('pwn_transaction_has_customers', 'pwn_transaction.ticket_number', '=', 'pwn_transaction_has_customers.pwn_transaction_ticket_number')
->join('pwn_customers', 'pwn_transaction_has_customers.pwn_customers_id', '=', 'pwn_customers.id')
->groupBy('ticket_number')
->get();
答案 0 :(得分:1)
首先,您需要阅读Laravel eloquent
例如。
控制器中带有Transaction
模型的简单代码
$transaction = Transaction::get();
您可以在模型中使用Eloquent Relationship
交易模型
public function items()
{
return $this->hasOne(TransactionItem::class); //based on your model and relationship
}
检索
$transaction = Transaction::with('items)->get();
Laravel使用mysql
作为默认连接或基于您的config/database.php
文件
如果要使用多个数据库,可以使用类似的
在Transaction
模型中的行下方定义
protected $connection = 'your-connection-name';
根据您的评论
确保在Transaction
模型中定义正确的关系
Transaction::with('hasDetails', 'details', 'branch', 'hasCustomers', 'customer')
->groupBy('ticket_number')
->where('ticket_number', $request->pawnTicket) //assume ticket_number column is inside the transactions table
->get();