Исправил немного вопрос и пост по просьбам людей и администрации сайта
Добрый вечер. Простите за возможно детские вопросы, к сожалению не так много времени на любимое занятие, и в паузах просто выветривается все из головы, из за этого постоянно каша в голове.
В общем суть такая, можно ли его перебрать в одном цикле и сразу же сохранить в бд результат? И как правильно это сделать? Выделил что нужно взять у каждого ключа массива. В следующем цикле ключи идентичны
Уверен, что ответ очень прост, но никак не могу понять... Хотя вроде раньше спокойно работал с массивами..... Не пинайте сильно.
Работаю в Yii2 и если не трудно, покажите пример как реализовать все это там?
Мой классpublic function tournaments($date, $timestamp){
$requests = $this->request("//$date/json?_=$timestamp");
// $result = [];
// foreach ($requests['sportItem']['tournaments'] as $key => $request){
// $result['tournament'] .= $request['tournament']['name'];
// $result['tournament'] .= $request['tournament']['uniqueId'];
// $result[] = $request['category']['name'];
// $result[] = $request['category']['id'];
// $result[] = $request['season']['year'];
// }
return $requests['sportItem']['tournaments'];
}
request, подставление в ссылку части сайта, к которой подключаюсь и идет парсинг. Форич делал просто на локалке, без фреемворка. В модель уже настроил на таблицу в бд. Создал
контроллер<?php
namespace app\controllers;
use yii\web\Controller;
use app\components\parseTennis;
class TennisController extends Controller
{
protected $header =заголовки
];
protected $referer = 'сайт';
public function actionIndex(){
$tennis = parseTennis::app("https://www.sofascore.com/tennis")
->set(CURLOPT_REFERER, $this->referer)
->set(CURLOPT_USERAGENT, $this->header);
$result = $tennis->tournaments(date("Y-m-d"), time('d', 'm', 'Y'));
return $this->render('index', ['result' => $result]);
}
}
, возможно не правильно, где передаю параметры и получаю данные массива.
Массив[0] => Array
(
[tournament] => Array
(
[name] => Roland Garros, Paris, France
[slug] => roland-garros-paris-france
[id] => 66712
[uniqueId] => 2480
[uniqueName] => Roland Garros
)
[category] => Array
(
[name] => ATP
[slug] => atp
[priority] => 7
[id] => 3
[flag] => atp
)
[season] => Array
(
[name] => 2019 French Open Men Singles
[slug] => 2019-french-open-men-singles
[year] => 2019
[id] => 20188
)
)
и т.д. Только первый ключ меняется с 0 на 1 и т.д, и меняются все значения.
Данные мне нужны такие, от
tournament uniqueIdunique Name, от
category name, id, от
season year
Буду очень благодарен за любую помощь:)
updateМодель<?php
namespace app\models;
use Yii;
/**
* This is the model class for table "tournaments".
*
* @property int $id
* @property string $name
* @property int $uniqueId
* @property string $category
* @property int $categori_id
* @property int $year
*/
class Tennis extends \yii\db\ActiveRecord
{
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'tournaments';
}
/**
* {@inheritdoc}
*/
public function rules()
{
return [
[['uniqueId', 'categori_id', 'year'], 'integer'],
[['name'], 'string', 'max' => 255],
[['category'], 'string', 'max' => 50],
[['uniqueId'], 'unique'],
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'name' => 'Name',
'uniqueId' => 'Unique ID',
'category' => 'Category',
'categori_id' => 'Categori ID',
'year' => 'Year',
];
}
}
И немного переделанный
контроллерpublic function actionIndex(){
$tennis = parseTennis::app("https://www.sofascore.com/tennis")
->set(CURLOPT_REFERER, $this->referer)
->set(CURLOPT_USERAGENT, $this->header);
$results = $tennis->tournaments(date("Y-m-d"), time('d', 'm', 'Y'));
$tournamentName = [];
$tournamentUniqueId = [];
$categoryName = [];
$categoryId = [];
$seasonYear = [];
foreach ($results['sportItem']['tournaments'] as $request){
$tournamentName[] = $request['tournament']['name'];
$tournamentUniqueId[] = $request['tournament']['uniqueId'];
$categoryName[] = $request['category']['name'];
$categoryId[] = $request['category']['id'];
$seasonYear[] = $request['season']['year'];
}
$model = new Tennis();
$model->name = $tournamentName;
$model->uniqueId = $tournamentUniqueId;
$model->category = $categoryName;
$model->categori_id = $categoryId;
$model->year = $seasonYear;
return $this->render('index', [
'model' => $model,
]);
}
Единственное не понимаю, как все это передать в БД:(