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



我想使用Y伊斯坦布尔2从数据库中获取有限数量的数据。我通过写下以下内容获取了所有记录:

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

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

更新:这是我的旅行模型

class TourDeparture extends yiidbActiveRecord

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 yiidbActiveQuery
*/
public function getTour()
{
return $this->hasOne(Tour::className(), ['id' => 'tour_id']);
}
/**
* Gets query for [[TourReservations]].
*
* @return yiidbActiveQuery
*/
public function getTourReservations()
{
return $this->hasMany(TourReservation::className(), ['tour_departure_id' => 'id']);
}

}

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

我是这样写的。但是ı获得了所有的记录

我很惊讶你的代码竟然能工作!您正在将Query类传递到map函数中。ArrayHelper::map期望一个数组,并且需要使用->all()来执行查询。->limit(5)只是在SQL查询中添加了一个新术语。

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

对于检索,前5行应该是

TourDeparture::find()->orderBy("id")->limit(5)->all() 

您共享的代码没有达到限制(5(。不管怎么说,我相信这是由数组映射引起的,你可以试着模拟下面的变化

$q = TourDeparture::find()->select(['id', 'tour_id'])->limit(5)->asArray()->all();
yiihelpersVarDumper::dump($q, $depth = 10, $highlight = true);

对于以上内容,在数组映射之前,以数组形式选择记录。

数组映射后,您可以从这里比较更改。

$departures = ArrayHelper::map(
$q,
'id',
'tour_id'
);
yiihelpersVarDumper::dump($departures, $depth = 10, $highlight = true);

最新更新