Php yii2设置只读属性:yii\data\Pagination::limit
我正在尝试将分页中Yii2中的活动数据提供程序限制为5条记录。根据文档,$limit属性是可用的,但我得到了以下错误:Php yii2设置只读属性:yii\data\Pagination::limit,php,pagination,yii2,Php,Pagination,Yii2,我正在尝试将分页中Yii2中的活动数据提供程序限制为5条记录。根据文档,$limit属性是可用的,但我得到了以下错误: Setting read-only property: yii\data\Pagination::limit 我的代码是: $dataProvider = new ActiveDataProvider([ 'query' => Order::find() ->where(['user_id' => $user_
Setting read-only property: yii\data\Pagination::limit
我的代码是:
$dataProvider = new ActiveDataProvider([
'query' => Order::find()
->where(['user_id' => $user_id]),
'sort' =>[
'defaultOrder' => [
'id' => SORT_DESC
]
],
'pagination' => [
'pageSize' => 20,
'limit' => 5,
],
]);
我的问题是:为什么会发生这种情况?如果我清除限制
一切顺利,页面大小
就可以工作了。。。在limit
上,所有操作都失败。。。我怎样才能解决这个问题
L.E:我找到了抛出此错误的源方法,以防有帮助:
/**
* Sets value of an object property.
*
* Do not call this method directly as it is a PHP magic method that
* will be implicitly called when executing `$object->property = $value;`.
* @param string $name the property name or the event name
* @param mixed $value the property value
* @throws UnknownPropertyException if the property is not defined
* @throws InvalidCallException if the property is read-only
* @see __get()
*/
public function __set($name, $value)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter($value);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
} else {
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
}
根据这一点,我试图:
getLimit()
而不是setLimit()
。。。知道为什么吗?Yii中的许多属性都是只读的。有两种简单的方法可以确定属性是否为只读
canSetProperty()
set
的方法,例如setLimit()
$object->label
和$object->label
是相同的。这是因为PHP中的方法名不区分大小写$object->label='abc'
将影响成员变量'label'
该行不会调用setLabel()
setter方法$limit公共只读属性
integer getLimit()
数据的限制。这可用于设置用于获取当前数据页的SQL语句的限制值。请注意,如果页面大小为无限大,将返回值-1
为了使其按预期工作,代码需要如下:
$dataProvider = new ActiveDataProvider([
'query' => Order::find()
->where(['user_id' => $user_id])
->limit(5),
'sort' =>[
'defaultOrder' => [
'id' => SORT_DESC
]
],
'pagination' => false,
]);
希望这有助于别人在我的立场 也许更合适
$query = new Query;
$provider = new ArrayDataProvider([
'allModels' => $query->from('post')->limit(5)->all(),
'key' => 'id',
'sort' => [
'defaultOrder' => [
'id' => SORT_DESC
]
]
]);
分页没有属性$limit @属性integer$限制数据的限制。这可用于设置SQL语句的限制值 该值由propery$pageSize设置 如果您需要获取最后5条新闻,并且必须使用寻呼机,则您需要以下内容:
$dataProvider = new ActiveDataProvider([
'query' => Order::find()
->where(['user_id' => $user_id]),
'sort' =>[
'defaultOrder' => [
'id' => SORT_DESC
]
],
'pagination' => [
'pageSize' => 5,
],
]);
是的,但我想通过分页来设置它,原因有两个:一个是因为我可以,所以为什么不呢,还有两个是因为php脚本的运行速度比a脚本快query@AresDraguna:))所以我建议您至少在将加载此数据提供程序的小部件中使用limit。无论如何,你不能这样做。你想达到什么目的
pageSize
将确定每页显示多少行。@Alex我试图只显示数据库中的最后5条记录。我看到了文档,我认为我在分页中有limit属性,但事实证明,我没有。。。检查我的回答我否决了这个问题:1)从代码中可以清楚地看出getLimit是getPageSize方法的别名,用于SQL数据检索(例如,MySQL中没有pageSize,但有一个限制)。2) 设置只读属性的原因是什么?作者明确设置为只读,您不应手动设置。3) “Use sources Luke”-只需打开源代码并在代码中找到答案,而不是问愚蠢的问题“为什么我不能设置只读属性”。这也适用于ActiveDataProvider,正如我的答案所示:)这与此无关。。。我只是想知道我是否可以在分页中使用limit属性,以及为什么该属性是只读的