Laravel 怎么在 App 同级目录 Server-client 目录中调用 ORM 模型进行数据库操作

我在项目的根目录建立了Server-client目录,那我该怎么在其中的一个php文件中调用laravel项目里面的orm模型进行数据库操作

怎么在app同级目录Server-client目录中调用orm模型进行数据库操作

这是我的项目目录,我该怎么在Server-client目录中调用orm模型操作
开始我是使用 curl 调用接口做数据库操作,后来发现数据量大之后带宽过大,后面改成 laravel 的 artisan 命令,在文件中调用 artisan 命令进行数据库操作,但是发现 artisan 命令还是比较占据性能,有什么比较好的数据库操作的方式吗

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

@Thresh-stone $capsule->addConnection()就是用来添加数据库配置的,你可以在初始化的时候把你配置好的所有数据库都通过$capsule->addConnection($otherConfig, 'other')添加上:

$configs = [
    'default' => [
        'driver'    => 'mysql',
        'host'      => '127.0.0.1',
        'database'  => 'poster',
        'username'  => 'root',
        'password'  => '123456',
        'charset'   => 'utf8',
        'collation' => 'utf8_general_ci',
        'prefix'    => '',
    ],
    'MT4_server' => [
        'driver'    => 'mysql',
        'host'      => 'xxx',
        'database'  => 'xxx',
        'username'  => 'xxx',
        'password'  => 'xxx',
        'charset'   => 'utf8',
        'collation' => 'utf8_general_ci',
        'prefix'    => '',
    ]
];
$capsule = new Capsule;
$capsule->addConnection($configs['default'], 'default');
// 第二个参数就是你模型指定的连接 protected $connection = 'MT4_server'
$capsule->addConnection($configs['MT4_server'], 'MT4_server');
$capsule->addConnection($configs['other'], 'otherName');

$capsule->setAsGlobal();
$capsule->bootEloquent();

这样在你的模型里边指定protected $connection = 'MT4_server';就行!

4年前 评论
讨论数量: 9

找到一个办法,将laravel的orm模型独立出来使用,使用composer require illuminate/database,发现可以使用,但是只能连接一个数据库,独立出来的ORM模型请问有没有类似于config/database一样的配置文件或者其他方法,让连接多个数据库的

4年前 评论

没太明白,既然你的client都在laravel中了,那么直接调用model不就行了,跟你app目录中调用一样的。

如果说你的client访问未经过laravel的入口,而是独立的入口,你这client相当于一个放在laravel中的独立项目了,图啥呢, illuminate/database可以通过composer单独加载,肯定也可以配置多个连接的,只是你需要手动配置

use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;
$capsule->addConnection([...], 'default');
//...
4年前 评论
blackkkk 4年前
Complicated

@芝麻 我觉得也是,不太明白他这个项目是怎么回事,既然属于laravel的的代码,在哪儿都能用orm,如果是个独立的项目,为啥要放在当前的laravel里呢?

4年前 评论

@芝麻 额,我在client目录下引入了入口文件,并且引用了我的模型,但是调用不了啊

require __DIR__.'/../vendor/autoload.php';
use Illuminate\Support\Facades\DB;
use App\Http\Models\Capital;

//尝试调用模型
Capital::first();

这里报错了,

Fatal error: Uncaught Error: Call to a member function connection() on null in D:\www\crm_2_back_end\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php:1253
Stack trace:

是缺少了啥依赖吗

4年前 评论

@Complicated 本来我也是想着直接调就完事了,但是发现好像调用不了,只能看看有没有其他办法了

4年前 评论

@Thresh-stone 首先确定下你的入口,应该不是public/index.php吧,也就是说你的client项目是独立的,既然是独立的,你就需要自己去构建数据库连接,因为你没经过laravel处理。

你上面的代码,只是调用模型,但是调用模型的前提是你要连接数据库:

use Illuminate\Database\Capsule\Manager as Capsule;
use Illuminate\Database\Eloquent\Model as Eloquent;
use App\Http\Models\Capital;

include __DIR__.'/../vendor/autoload.php';

$capsule = new Capsule;
$capsule->addConnection([
    'driver'    => 'mysql',
    'host'      => '127.0.0.1',
    'database'  => 'xxx',
    'username'  => 'root',
    'password'  => '123456',
    'charset'   => 'utf8',
    'collation' => 'utf8_general_ci',
    'prefix'    => '',
]);
$capsule->setAsGlobal();
$capsule->bootEloquent();

Capital::first();
4年前 评论

@芝麻
感谢您的回复

$capsule->addConnection([
    'driver'    => 'mysql',
    'host'      => '127.0.0.1',
    'database'  => 'xxx',
    'username'  => 'root',
    'password'  => '123456',
    'charset'   => 'utf8',
    'collation' => 'utf8_general_ci',
    'prefix'    => '',
]);

这一步是连接数据库,如果我想要连接两个个数据库我该怎么传参数,我查看了一下,addConnection这个函数有两个参数,但是不知道另一个name参数如何使用
比如说我在laravel里面config/database配置了两个数据库

'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' => env('DB_PREFIX', ''),
       ],

        'MT4_server' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_MT4_HOST', '127.0.0.1'),
            'port' => env('DB_MT4_PORT', 3306),
            'database' => env('DB_MT4_DATABASE', ''),
            'username' => env('DB_MT4_USERNAME', ''),
            'password' => env('DB_MT4_PASSWORD', ''),
            'charset' => env('DB_CHARSET', 'utf8'),
        ],

然后我有另一个模型连接的是MT4_server这个配置项的数据库

namespace App\Http\Models;

use Illuminate\Database\Eloquent\Model;

class Mt4Trades extends Model
{
    protected $connection = "MT4_server";
    protected $table = "MT4_TRADES";
}

那client目录中我该怎么使用Mt4Trades这个模型呢

4年前 评论

@Thresh-stone $capsule->addConnection()就是用来添加数据库配置的,你可以在初始化的时候把你配置好的所有数据库都通过$capsule->addConnection($otherConfig, 'other')添加上:

$configs = [
    'default' => [
        'driver'    => 'mysql',
        'host'      => '127.0.0.1',
        'database'  => 'poster',
        'username'  => 'root',
        'password'  => '123456',
        'charset'   => 'utf8',
        'collation' => 'utf8_general_ci',
        'prefix'    => '',
    ],
    'MT4_server' => [
        'driver'    => 'mysql',
        'host'      => 'xxx',
        'database'  => 'xxx',
        'username'  => 'xxx',
        'password'  => 'xxx',
        'charset'   => 'utf8',
        'collation' => 'utf8_general_ci',
        'prefix'    => '',
    ]
];
$capsule = new Capsule;
$capsule->addConnection($configs['default'], 'default');
// 第二个参数就是你模型指定的连接 protected $connection = 'MT4_server'
$capsule->addConnection($configs['MT4_server'], 'MT4_server');
$capsule->addConnection($configs['other'], 'otherName');

$capsule->setAsGlobal();
$capsule->bootEloquent();

这样在你的模型里边指定protected $connection = 'MT4_server';就行!

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!