谁一开始就是大神?

PHP 第74页

PHP

输出数据库查询出的数组值[2.0]

GraceLion阅读(88)

echo "<pre>";
var_dump($provider1);

输出结果:

array(3) {
    [0] =>
        array(1) {
            'model' =>string(10) "887227-R01"
        }
    [1] =>
        array(1) {
            'model' =>string(10) "882863-R01"
        }
    [2] =>
        array(1) {
            'model' =>string(10) "882863-R04"
        }
}

怎么写输出语句使结果只循环值,如:887227-R01;882863-R01;882863-R04;

dump输出不是这样是哪样?
要改输出样式用foreach+echo,
还有不明白的,去google。
这样搞:
用这个方法ArrayHelper::getColumn就能得到你想要的结果。

请问怎样自义验证码样式?谢谢[2.0]

Lielephant阅读(91)

<?= $form->field($model,’captcha’)->widget(

                     yii\captcha\Captcha::className(),
                     [
                        'template'=>'{input}{image}',
                        'captchaAction'=>'site/captcha',
                        'imageOptions'=>['title'=>'点击换图','alt'=>'点击图',
                                         'style'=>'cursor:pointer']
                     ]); 

?>

怎样设置{input}的样式inputOptions不行了,怎么办!

‘imageOptions’=>[‘title’=>’点击换图’,’alt’=>’点击图’,
这段设置的是图片的样式,
设置验证码输入框样式请用下面:
‘options’ => [
回答的很好 支持下
不错,刚开始一直认为是inputOptions,原来是’options’ => [

插入数据怎么使用replaceinto[2.0]

Bravequeen阅读(93)

求大神指教 我现在操作数据库都是继承ActiveRecord

class UserWeibo extends ActiveRecord
{
	
	public static function tableName()
    {
    	return '{{%user_weibo}}';
    }

    /**
     * 添加
     */
    public function add($data) 
    {
        $this->setAttributes($data, false);

        if(self::find()->where(['id'=>$data['id']])->count() > 0) { //重复关注
            return $this->edit(['id'=>$data['id']], $data);
        }
        return $this->save();
    }
}

现在每次插入前都先判断下是否存在 我想改成用mysql的 replace into 求教应该怎么写

MySQL replace into 有三种形式:
第一种形式类似于insert into的用法,
第二种replace select的用法也类似于insert select,这种用法并不一定要求列名匹配,事实上,MYSQL甚至不关心select返回的列名,它需要的是列的位置。例如,replace into tb1( name, title, mood) select rname, rtitle, rmood from tb2;?这个例子使用replace into从?tb2中将所有数据导入tb1中。
第三种replace set用法类似于update set用法,使用一个例如“SET col_name = col_name + 1”的赋值,则对位于右侧的列名称的引用会被作为DEFAULT(col_name)处理。因此,该赋值相当于SET col_name = DEFAULT(col_name) + 1。
yii2 不支持吗?

继承ActiveRecord的模型类怎么添加自义属性[2.0]

Slyfrog阅读(100)

用gii自动生成的模型类中的属性都是根据关联的数据表来生成的,例如user表中有三个字段,id,username,password,那么模型类user中会有这三个字段,那现在想自定义一个数据表中没有的属性,比如添加email,那怎么去做呢

Defining Attributes :
http://www.yiiframework.com/doc-2.0/guide-structure-models.html#defining-attributes
复制一个user,改成email ?
做新属性,你参考它现有的格式就行。
具体还得看你想实现什么功能。
private $email;即可啊

model中怎么弄可以表连接

Neoyak阅读(82)

同一页面中由于要用到其他表的字段 跪求在model中表之间连接的方法
以下是报错原因:
The SQL being executed was: SELECT COUNT(*) FROM oc_order_product_return_record INNER JOIN oc_order_part_product ON oc_order_product_return_record.order_part_product_id = oc_order_part_product.order_part_product_id INNER JOIN oc_order_part_product ON oc_order_product_return_record.order_id = oc_order_part_product.order_id

你PO的並不是報錯…. 你PO的是 你執行的 sql語句
你可以在你的 資料庫 sql 把這段貼上去看看就知道跑錯甚麼了
一个表一个Model呗,你Model连了两个表,那还能叫ORM么……

同一時間新增資料無法當下抓到新增的筆數

dmEagle阅读(101)

想請問 我用 ab.exe 我的API
API 功能描述 : 這項活動只能新增10筆訂單
於是我使用 sql 抓取活動範圍並 count($order::find()->where(‘xxx’)->all())
看是幾筆

if(count($active) >= 10){
    exit;
    當活動次數達10筆時,停止操作
}

$order = new Order();
$order->xxxx = 'xxx';
$order->save();

我單次單次執行 API 是可行的當執行10次時 因為新增10筆就會停止動作
但是我用 ab 時 一次傳送20筆 他就會跳過~我所限定的新增次數範圍
因為是同一時間傳送了20筆 資料庫無法抓到比數

是有看過 PHP synchronized 同步的範例 但資訊真的很少完全沒有頭緒
想請問大家有甚麼辦法能解決此類的問題
能否 PO 點 example 讓我參考或學習….快吐血了

这样子可能轻松生成上千订单
依赖 mysql count订单量, 在并发情况下 是不可靠的.
除非你加锁, 针对你这种情况, 需要加表级别锁, 还得是WRITE LOCK, 将会引起性能上的极大隐患, 不推荐.
一个简单易行 比较讨巧的办法 是做一个原子性的自增计数, 来帮你控制10个订单的量.
你可以用mysql的自增id特性完成, 他内部维护有轻量的自增锁.
具体做法是: 新建一张表A, 只要一个自增主键即可; 每次请求 都先插入表A一条空数据, 拿到一个自增id, 判断是否大于10即可;
针对你这个情况, 应该足以应付了.
当然 如果使用内存db, 比如redis memcache等, 来实现一个自增计数, 或者一个队列, 就更高效了
http://www.yiichina.com/tutorial/563
这页的教程,yii2 by example这本书很好,你可以过去下载。

Yii2ActiveRecordsave()方法问题[2.0]

Lvyapple阅读(87)

RT,之前一直以为 ActiveRecord->save 方法 可以当数据不存在时 insert,存在时update,后来在中文官网上看到了这段文档:

// 新建一条记录
$model = new Customer;
if ($model->load(Yii::$app->request->post()) && $model->save()) {
    // 获取用户输入的数据,验证并保存
}

// 更新主键为$id的AR
$model = Customer::findOne($id);
if ($model === null) {
    throw new NotFoundHttpException;
}
if ($model->load(Yii::$app->request->post()) && $model->save()) {
    // 获取用户输入的数据,验证并保存
}

按照这个逻辑,我现在如果想更新id = 100这条数据信息,如果数据表中没有这条记录,那么$model === null,如此一来,还得先判断,如果为空,实例化一个 $model,然后:

$model = new Customer();
$model->id = 100;
.....

感觉这样不够优雅,还是说我对ActiveRecord的理解有问题?

首先, 你理解的没错儿.
只不过, 大部分业务逻辑中 …
如果update, 通常是取出数据, 然后做一些操作, 最后修改数据后再save(此时就是update)
此种情况下, 如果按条件取不到数据, 往往意味着 : 哪里出了问题?, 404?,
于是抛出异常或者其他处理措施……
你想要的 其实就是这种情况的处理措施之一 : 取不到数据, 我不抛异常, 不给404 我直接新建一条..
最后 感觉这样不够优雅.
你可以自己加一个方法来扩充ActiveRecord. 比如 : updateOrInsert()
这样似乎会友好, 优雅一点
理解没错 BD
为什么我执行$model->save();方法的时候,总是执行插入操作?比如我要进行更新操作,我先建了一个model ModifyForm.php,并在里面定义了相应的规则,model里面写了doModify这个方法,里面通过new Admin()这个数据表,并对要改变的值进行重新赋值,再执行save()方法,在控制器这端引用这个model,if($model->load(Yii::$app->request->post()) && $model->validate()){$user = $model->doModify($id);if($user){return $this->redirect([‘user/index’]);}}执行后直接是空白页。这是怎么回事呢?网上找了很多更新的方法,都不行。
你可以直接$model = new Customer(); $model->id = 100;这样save不就可以update啦?

AR查询的时候,where条件不为空怎么写[2.0]

FionaStone阅读(92)

官方的文档中有一个为空的例子:

// ...WHERE (`status` = 10) AND (`type` IS NULL) AND (`id` IN (4, 8, 15))
$query->where([
    'status' => 10,
    'type' => null,
    'id' => [4, 8, 15],
]);

那不为空的条件怎么写呢?

登录

找回密码

注册