优化Laravel雄辩?

时间:2019-04-03 06:29:49

标签: mysql laravel eloquent

我在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();

1 个答案:

答案 0 :(得分:1)

首先,您需要阅读Laravel eloquent

例如。 控制器中带有Transaction模型的简单代码

$transaction = Transaction::get();

您可以在模型中使用Eloquent Relationship

交易模型

public function items()
{
   return $this->hasOne(TransactionItem::class); //based on your model and relationship
}

通过关系Constraining Eager Loads

检索
$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();
相关问题