繁体   English   中英

使用 yii2 获取有限数量的数据

[英]get limited numbers of data with yii2

我想使用 Yİİ2 从数据库中获取有限数量的数据。 我通过写这个来获取所有记录:

$departures = ArrayHelper::map(
    TourDeparture::find()->all(),
    'id',
    'tour_id'
);

我尝试使用limit(5) ,这样我只能得到 5 行。 但我不能。 尽管如此,我还是得到了表中的所有行。 我怎样才能做到这一点?

更新:这是我的出发地 model

class TourDeparture extends \yii\db\ActiveRecord

{

public static function tableName()
{
    return 'tour_departure';
}

/**
 * {@inheritdoc}
 */
public function rules()
{
    return [
        [['tour_id', 'start_date', 'end_date', 'price_1adult', 'price_2adult', 'price_3adult', 'price_child', 'price_baby', 'min_guests', 'max_guests', 'status', 'required_min_guest'], 'required'],
        [['tour_id', 'min_guests', 'max_guests', 'status', 'required_min_guest'], 'integer'],
        [['start_date', 'end_date'], 'safe'],
        [['price_1adult', 'price_2adult', 'price_3adult', 'price_child', 'price_baby'], 'number'],
        [['tour_id'], 'exist', 'skipOnError' => true, 'targetClass' => Tour::className(), 'targetAttribute' => ['tour_id' => 'id']],
    ];
}

/**
 * {@inheritdoc}
 */
public function attributeLabels()
{
    return [
        'id' => 'ID',
        'tour_id' => 'Tour ID',
        'start_date' => 'Start Date',
        'end_date' => 'End Date',
        'price_1adult' => 'Price 1adult',
        'price_2adult' => 'Price 2adult',
        'price_3adult' => 'Price 3adult',
        'price_child' => 'Price Child',
        'price_baby' => 'Price Baby',
        'min_guests' => 'Min Guests',
        'max_guests' => 'Max Guests',
        'status' => 'Status',
        'required_min_guest' => 'Required Min Guest',
    ];
}

/**
 * Gets query for [[Tour]].
 *
 * @return \yii\db\ActiveQuery
 */
public function getTour()
{
    return $this->hasOne(Tour::className(), ['id' => 'tour_id']);
}

/**
 * Gets query for [[TourReservations]].
 *
 * @return \yii\db\ActiveQuery
 */
public function getTourReservations()
{
    return $this->hasMany(TourReservation::className(), ['tour_departure_id' => 'id']);
}

}

检索前 5 行应该是

TourDeparture::find()->orderBy("id")->limit(5)->all() 
$departures = ArrayHelper::map( TourDeparture::find()->limit(5), 'id', 'tour_id' );

我像上面那样写的。 但我得到了所有的记录

我很惊讶您的代码完全有效! 您将Query class 传递给map function。 ArrayHelper::map需要一个数组,需要使用->all()执行查询。 ->limit(5)只是向 SQL 查询添加一个新术语。

$departures = ArrayHelper::map( TourDeparture::find()->limit(5)->all(), 'id', 'tour_id' );

您共享的代码没有达到限制(5)。 无论如何,我相信它是由数组 map 引起的,您可以尝试模拟如下变化

$q = TourDeparture::find()->select(['id', 'tour_id'])->limit(5)->asArray()->all();

\yii\helpers\VarDumper::dump($q, $depth = 10, $highlight = true);

对于上述,以数组形式选择的记录,在数组 map 之前。

在数组 map 之后,您可以从这里比较更改。

$departures = ArrayHelper::map(
                 $q,
                 'id',
                 'tour_id'
              );

\yii\helpers\VarDumper::dump($departures, $depth = 10, $highlight = true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM