PHP code example of yangweijie / think-orm-async

1. Go to this page and download the library: Download yangweijie/think-orm-async library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

yangweijie / think-orm-async example snippets



namespace app\model;

use think\Model;
use Yangweijie\ThinkOrmAsync\AsyncModelTrait;

class User extends Model {
    use AsyncModelTrait;
    protected $name = 'user';
    protected $prefix = '';  // 可选:表前缀
}

class Order extends Model {
    use AsyncModelTrait;
    protected $name = 'order';
}

class Product extends Model {
    use AsyncModelTrait;
    protected $name = 'product';
}


namespace app\controller;

use Yangweijie\ThinkOrmAsync\AsyncContext;
use app\model\User;
use app\model\Order;
use app\model\Product;

class UserController {
    public function detail($id) {
        // 开始异步上下文(自动从配置读取数据库配置)
        AsyncContext::start();
        
            // ORM 查询
            $user = User::where('id', $id)->find();
            $orders = Order::where('user_id', $id)->select();
            $products = Product::where('status', 1)->select();
            
            // 原生 SQL 查询
            $stats = AsyncContext::query("SELECT COUNT(*) as total FROM user");
        
        // 结束异步上下文,执行所有查询(并行执行)
        AsyncContext::end();
        
        // 使用结果(和同步模式完全一样)
        echo $user->name;
        
        foreach ($orders as $order) {
            echo $order->order_no;
        }
        
        echo "Products: " . count($products);
        echo "Total users: " . $stats[0]['total'];
    }
}

AsyncContext::start();

    // find 查询
    $user = User::find(1);
    
    // select 查询
    $users = User::where('status', 1)->select();
    
    // 链式查询
    $orders = Order::where('user_id', 1)
        ->order('create_time', 'desc')
        ->limit(10)
        ->select();

$results = AsyncContext::end();

// 访问结果
echo $user->name;
echo $users->count();

AsyncContext::start();

    // 简单查询
    $result = AsyncContext::query("SELECT * FROM user WHERE id = 1");
    
    // 复杂查询
    $stats = AsyncContext::query("
        SELECT 
            COUNT(*) as total,
            AVG(age) as avg_age
        FROM user
        WHERE status = 1
    ");
    
    // 自定义 key
    $custom = AsyncContext::query("SELECT COUNT(*) FROM order", 'order_count');

$results = AsyncContext::end();

// 访问结果
echo $result[0]['name'];
echo $stats[0]['total'];
echo $custom[0]['order_count'];

AsyncContext::start();

    // ORM 查询
    $user = User::find(1);
    $orders = Order::where('user_id', 1)->select();
    
    // 原生查询
    $stats = AsyncContext::query("SELECT COUNT(*) as total FROM user");

$results = AsyncContext::end();

// 所有查询并行执行

// 无需传递配置,自动读取
AsyncContext::start();
    $result = AsyncContext::query("SELECT 1");
$results = AsyncContext::end();

$dbConfig = [
    'hostname' => 'localhost',
    'database' => 'your_database',
    'username' => 'root',
    'password' => 'password',
    'hostport' => '3306',
    'charset' => 'utf8mb4',
];

AsyncContext::start(null, $dbConfig);
    $result = AsyncContext::query("SELECT 1");
$results = AsyncContext::end();

AsyncContext::start()->setTimeout(15);

    $user = User::where('id', 1)->find();

AsyncContext::end();

use Yangweijie\ThinkOrmAsync\Exception\AsyncQueryException;
use Yangweijie\ThinkOrmAsync\Exception\AsyncResultError;

AsyncContext::start();

    $user = User::where('id', 1)->find();
    $orders = Order::where('user_id', 1)->select();

try {
    $results = AsyncContext::end();
    
    // 处理成功结果
    echo "User: " . $user->name . "\n";
    
} catch (AsyncQueryException $e) {
    // 批次查询整体失败
    echo "Batch query failed: " . $e->getMessage();
    print_r($e->getErrors());
}

AsyncContext::start();

    $user = User::where('id', 1)->find();
    $invalid = InvalidModel::where('id', 999)->find();

$results = AsyncContext::end();

// 检查每个查询结果
foreach ($results as $key => $result) {
    if ($result instanceof AsyncResultError) {
        echo "Query [$key] failed: " . $result->getMessage() . "\n";
    } else {
        // 处理成功结果
        echo "Query [$key] succeeded\n";
    }
}

AsyncContext::start();

    $user = User::where('id', 1)->find();
    $orders = Order::where('user_id', 1)->select();

$results = AsyncContext::end();

// 数组访问
echo $user->name;
echo $user['email'];

// 遍历
foreach ($orders as $order) {
    echo $order->order_no;
}

// 计数
$count = count($orders);
echo "共 {$count} 个订单";

AsyncContext::start();

    $user = User::where('id', 1)->find();
    $orders = Order::where('user_id', 1)->select();

$results = AsyncContext::end();

// 转换为数组
$userArray = $user->toArray();
$ordersArray = $orders->toArray();

// 转换为 JSON
$json = $orders->toJson();
echo $json;

AsyncContext::start();

    $user = User::where('id', 1)->find();
    $orders = Order::where('user_id', 1)->select();

$results = AsyncContext::end();

// 获取实际的模型对象
$userModel = $user->getModel();
dump($userModel);  // 显示完整的模型对象

// 或者直接使用(透明代理)
echo $user->name;

// 检查是否为空
if ($user->isEmpty()) {
    echo "用户不存在";
}

// 获取第一个元素
$firstOrder = $orders->first();

// 获取最后一个元素
$lastOrder = $orders->last();