Php 如何在使用两个不同数据库的BD查询Laravel中使用Join?
我用下面的代码在页面中显示一个表,但它不起作用。我得到了这个错误,上面说命令被拒绝了Php 如何在使用两个不同数据库的BD查询Laravel中使用Join?,php,laravel,Php,Laravel,我用下面的代码在页面中显示一个表,但它不起作用。我得到了这个错误,上面说命令被拒绝了 $posts = DB::connection('mysql2') ->table('wp_rocketsciencebrposts') ->join('users', 'users.rsbwordpressid', '=', 'wp_rocketsciencebrposts.post_author') ->select('ID', 'post_title', 'post_status', '
$posts = DB::connection('mysql2')
->table('wp_rocketsciencebrposts')
->join('users', 'users.rsbwordpressid', '=', 'wp_rocketsciencebrposts.post_author')
->select('ID', 'post_title', 'post_status', 'post_author', 'post_date', 'users.name')
->whereIn('post_status', ['publish', 'private'])
->where('post_type', 'post')
->orderBy('id', 'desc')
->paginate(15, ['*'], 'posts');
SQLSTATE[42000]:语法错误或访问冲突:1142 SELECT命令
拒绝用户“lovel095_heaven”@“177.134.6.23”的表格“用户”
(SQL:从wp\u rocketsciencerbosts
在users
rsbwordpressid
=
mysql2
wp\u-rocketsciencerbosts
post\u-author
其中post\u-status
在(发布、私有)和post\u类型中
=post)
两个数据库位于同一台服务器上。表“wp_RocketscienceBosts”来自“lovel095_RocketscienceBosts”数据库。
表“用户”来自“lovel095\u centralrsb”数据库 在我的.env文件中,我输入了以下内容:
DB_CONNECTION=mysql
DB_HOST=br862.hostgator.com.br
DB_PORT=3306
DB_DATABASE=lovel095_centralrsb
DB_USERNAME=(myusername)
DB_PASSWORD=(mypassword)
DB_CONNECTION_SECOND=mysql
DB_HOST_SECOND=br862.hostgator.com.br
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=lovel095_rocketsciencebr
DB_USERNAME_SECOND=(myusername)
DB_PASSWORD_SECOND=(mypassword)
在我的config>database.php文件中,我得到了以下信息:
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'mysql2' => [
'driver' => env('DB_CONNECTION_SECOND'),
'host' => env('DB_HOST_SECOND'),
'port' => env('DB_PORT_SECOND'),
'database' => env('DB_DATABASE_SECOND'),
'username' => env('DB_USERNAME_SECOND'),
'password' => env('DB_PASSWORD_SECOND'),
],
请帮忙 大多数数据库都不支持跨数据库连接,我相信SQL server支持它,但它必须在同一台服务器上。不要强迫应用程序连接两个不同的数据库,只需单独使用数据库即可 在您的情况下,只需先选择帖子,然后使用foreach选择用户名。以下是解决方法:
$posts = DB::connection('mysql2')
->table('wp_rocketsciencebrposts')
->select('ID', 'post_title', 'post_status', 'post_author', 'post_date')
->whereIn('post_status', ['publish', 'private'])
->where('post_type', 'post')
->orderBy('id', 'desc')
->paginate(15, ['*'], 'posts');
foreach ($posts as $key => $post){
$user = DB::connection('mysql')
->table('lovel095_centralrsb')
->where('id', $post->post_author)
->first();
$posts[$key]->post_author_name = $user->name;
}
您好,我不确定您是否需要配置2个数据库来执行这种查询。 只需确保用于连接到一个数据库的凭据能够同时访问这两个数据库,它可以与MySql一起使用 从这里我建议你读一读 基本上,您需要在表前面加上数据库名,联接才能工作。 我建议您首先从PhpMyAdmin中尝试,然后将其转换为Laravel查询生成器 请记住,您可以在查询生成器中使用整个原始查询,如:
DB::select( DB::raw("SELECT * FROM some_table WHERE some_col = '$someVariable'") );
是的,数据库在同一台服务器上。我已经实现了您的解决方案,但它会产生另一个问题,foreach循环中的DB查询会使我的页面变慢,因为它会同时发出15个数据库请求。我的解决方法是实现一个连接,但正如您所看到的,我在这方面也遇到了问题。您使用的是什么数据库?我将MySQL与PhpMyAdmin一起使用。如果Elounce有点复杂,您可以尝试此解决方案,您可以始终使用query builder