小编use*_*752的帖子

laravel哪里有结果怪异

产品型号

    public function country() {
        return $this->hasMany('App\Models\ProductCountry', 'product_id', 'id');
    }
Run Code Online (Sandbox Code Playgroud)

控制器

$product = Product::where('mall_' . $this->mall_id, '=', 1)
    ->whereHas('country', function ($i) use ($me) {
        return $i->where('country_id', $me->country_id);
    })
    ->find($key);
Run Code Online (Sandbox Code Playgroud)

原始SQL:

select * from `product` where `mall_3` = '1' and exists (select * from `product_country` where `product_country`.`product_id` = `product`.`id` and `country_id` = '109') and `product`.`id` = '3' and `product`.`deleted_at` is null limit 1
Run Code Online (Sandbox Code Playgroud)

上面的SQL返回没有结果(当产品id = 3时

在SQL下面返回正确的结果(当产品id = 6时)

select * from `product` where `mall_3` = '1' and exists (select * …
Run Code Online (Sandbox Code Playgroud)

php mysql laravel laravel-5 laravel-eloquent

15
推荐指数
2
解决办法
903
查看次数

Laravel lockforupdate(悲观锁定)

我正在试图弄清楚如何正确使用/测试lockforupdate,但我发现它的功能不像我的预期

这只是测试

public function index() {
        return dd(\DB::transaction(function() {
            if (\Auth::guard('user')->check()) {
                $model = \App\Models\User::find(1)->lockForUpdate();
                sleep(60);
                $model->point = 100000;
                $model->save();
            } else {
                $model = \App\Models\User::find(1);
                $model->point = 999;
                $model->save();
            }

            return $model;
        }));
}
Run Code Online (Sandbox Code Playgroud)

我尝试在2个浏览器中测试,浏览器1用户登录,浏览器2未登录,浏览器1点击刷新,然后锁定更新并在更新前60秒睡眠

在60秒内,我去浏览器2并点击刷新,但记录未锁定,我检查phpmyadmin并更新记录(在浏览器1的60秒锁定触发器内)

但是在60秒之后,浏览器1再次修改了记录(点100000)

所以我误解了lockforupdate用于?或者我测试不正确?

我期望的是在前60秒内浏览器2不应该修改行(带有加载图标的空白页或错误抛出?)

https://laravel.com/docs/5.2/queries#pessimistic-locking

我做了一些研究,但仍然无法理解sharedLock(LOCK IN SHARE MODE)和lockForUpdate(FOR UPDATE)之间的区别

顺便说一句,我确认数据库是innodb

php mysql pessimistic-locking laravel laravel-5

8
推荐指数
2
解决办法
1万
查看次数

jQuery ajax回到$ _POST而不是REQUEST有效负载

我记得我去年使用jQuery ajax帖子,我可以通过输入简单地获取帖子数据$_POST['param'].今天我再次使用它来进行项目,所以我加载了最新的jQuery lib并使用了以下代码:

<script type="text/javascript">
    $(document).on('submit', '.ajaxform', function(e){
        e.preventDefault();

        var datastring = $(this).serialize();

        $.ajax({
            type: "POST",
            data: datastring,
            contentType: "application/json; charset={CHARSET}",
            dataType: "json",
            beforeSend: function(){
                console.log($(this).serialize());
            },
            success: function(data){
                alert('yes');
            },
            error: function(errMsg){
                alert('error');
            }
        });
    });
</script>
<form action="" id="register" name="register" class="ajaxform" method="post" enctype="multipart/form-data">

    <input type="text" name="username" value="" />
    <input type="password" name="password" value="" />

    <input type="hidden" name="action" value="register" />
    <input type="hidden" name="{TOKENID}" value="{TOKEN}" />

    <input type="submit" value="Register" />

</form>
Run Code Online (Sandbox Code Playgroud)

提交后,我无法通过键入获取输入字段值$_POST['username'].

我检查了检查元素,我注意到有些不同.

Request URL:http://project0/member.php …
Run Code Online (Sandbox Code Playgroud)

php jquery header http

7
推荐指数
1
解决办法
5993
查看次数

laravel eloquent JOIN ON多个条件

我有一个表呼银行,存储国家银行名称,代码等

我有一个表呼叫site_banks,它存储银行账户,银行持有人名称和涉及银行的外国bank_id

我有一个表存款deposit_records,存储存款时间,存款收据,状态等,以及涉及site_banks的外国bank_id

对于deposit_records,状态字段,值1表示成功

现在我想计算每个site_banks的总收入

但我不希望每一行site_banks调用一个查询来计算,这将有很多sql查询调用

所以我想我可以使用join,下面是site_banks模型文件,scopeGroupAllSiteBanksByBranch是我想收集所有site_banks,用SUM连接,返回数组的地方

但即使我有大约200个site_banks行,很多deposit_records行,其状态为'1',但scopeGroupAllSiteBanksByBranch将始终只返回一行,我不明白为什么,我复制sql查询在mysql中运行,是同样的结果,只有1行返回.

<?php

use Illuminate\Database\Eloquent\SoftDeletingTrait;

class SiteBanks extends \LaravelBook\Ardent\Ardent {

    use SoftDeletingTrait;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'site_banks';

    protected $dates = ['deleted_at'];

    protected $fillable = array('bank_id', 'bank_name', 'bank_account', 'bank_holder', 'bank_username', …
Run Code Online (Sandbox Code Playgroud)

php mysql join laravel laravel-4

2
推荐指数
1
解决办法
1万
查看次数