产品型号
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) 我正在试图弄清楚如何正确使用/测试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
我记得我去年使用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) 我有一个表呼银行,存储国家银行名称,代码等
我有一个表呼叫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)