【问题标题】:Base Table not found on unique value validation in MongoDB with laravel使用 laravel 在 MongoDB 中的唯一值验证中找不到基表
【发布时间】:2017-05-22 01:16:51
【问题描述】:

我正在使用带有 jenssegers/laravel-mongodb 包的 laravel 5.3 来管理 mongodb 连接。

我想在每次用户发送请求以在我的控制器中注册网站时检查它是否是唯一的,然后让用户注册他/她的网站域。

我写了下面的代码进行验证,但我得到的结果是:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'iranad.seat' doesn't exist (SQL: select count(*) as aggregate from `seat` where `domain` = order.org)

我的控制器代码:

public function store(Request $request) {
    $seat = new Seat();

    $validator = Validator::make($request->all(), [
            'domain' => 'required|regex:/^([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/|unique:seat', //validating user is entering correct url like : iranad.ir
            'category' => 'required',
    ]);

    if ($validator->fails()) {
        return response()->json($validator->messages(), 400);
    } else {
        try {
            $statusCode = 200;
            $seat->user_id = Auth::user()->id;
            $seat->url = $request->input('domain');
            $seat->cats = $request->input('category');
            $seat->filter = [];
            if($request->input('category') == 'all') {
                $obj['cats'] = 'false';
                $seat->target = $obj;
            } else {
                $obj['cats'] = 'true';
                $seat->target = $obj;
            }
            $seat->status = 'Waiting';
            $seat->save();
        } catch (\Exception $e) {
                $statusCode = 400;
        } finally {
                $response = \Response::json($seat, $statusCode);
                return $response;
        }
    }
}

我的座椅型号:

namespace App;

use Moloquent;
use Carbon\Carbon;

class Seat extends Moloquent {

    public function getCreatedAtAttribute($value) {
        return Carbon::createFromTimestamp(strtotime($value))
            ->timezone('Asia/Tehran')
            ->toDateTimeString();
    }
}

很明显,验证器正在检查 mysql 表中的域是否是唯一的,这会导致此错误,如何更改验证过程以检查 mongodb 而不是 mysql?

【问题讨论】:

    标签: mysql mongodb validation unique laravel-5.3


    【解决方案1】:

    我解决了这个问题,解决方案是你应该在你的模型中添加 Moloquent 并定义数据库连接:

    namespace App\Models;
    
    use Moloquent;
    use Carbon\Carbon;
    
    class Seat extends Moloquent
    {
        protected $collection = 'seat';
        protected $connection = 'mongodb';
    }
    

    【讨论】:

    • 这个修复对我不起作用我正在使用Laravel 5.5.40
    • 我的问题已通过验证规则中的unique:mongodb.seat 修复。
    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 2014-08-20
    • 2022-01-25
    • 2019-05-08
    相关资源
    最近更新 更多