У меня есть эта конечная точка, которая отображается. Но у меня есть конечная точка API, которую я хочу сохранить в базе данных.
public function apifeed(Request $request)
{
$array_content=[];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://api.company.com/article/6spf2p?_fmt=xml&_rt=b&_fld=hl,img,bd&lnk=urn:perform:image&_lcl=en");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //Important
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
$result = curl_exec($ch);
//$array = json_decode($result, true);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
$plainXML = self::mungXML($result);
$arrayResult = json_decode(json_encode(SimpleXML_Load_String($plainXML, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
$i=0;
foreach($arrayResult['article'] as $value)
{
$newobj = new stdClass();
$newobj->id = $value['@attributes']['id'];
$newobj->headline = $value['headline'];
$newobj->body = $value['body'];
$newobj->image_header ='https://images.performgroup.com'.
$value['links']['link'][0]['@attributes']['url'];
$newobj->image_teaser ='https://images.performgroup.com'.
$value['links']['link'][1]['@attributes']['url'];
$newobj->image_mobile ='https://images.performgroup.com'.
$value['links']['link'][2]['@attributes']['url'];
$newobj->image_source = 'https://images.performgroup.com'.
array_push($array_content,$newobj);
$i++;
}
return $array_content;
}
Я хочу сохранить его в этой таблице
news_feeds
CREATE TABLE `news_feeds` (
`id` varchar(80) NOT NULL,
`headline` varchar(255) NOT NULL,
`news_body` text NOT NULL,
`image_teaser` varchar(300) NOT NULL,
`image_mobile` varchar(300) NOT NULL,
`image_source` varchar(300) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Модель NewsFeed
Как написать оператор foreach после
return $array_content
и сохранить в таблицу
news_feeds
$newobj->id into id
$newobj->id into headline
$newobj->body into news body
$newobj->image_teaser into image_teaser
и так далее.
Вы действительно близки. $newobj = новая новостная лента(); затем вы назначаете идентификатор, заголовок, тело и другие поля так же, как вы их записали. Наконец, вызовите $newobj->save(); . Есть много лучших практик, которые вы должны рассмотреть, чтобы внедрить это в производство, но выполняет свою работу. Взгляните на laravel.com/docs/5.8/eloquent#inserts
имя модели — NewsFeed, а имя таблицы — новостные ленты. Я помещаю столбцы в код
Затем, если заголовок существует, он не должен сохраняться. Он должен делать что угодно






Вам не нужно создавать stdClass или добавлять зацикленные данные в новый массив для сохранения записей. Вы можете сохранять записи, используя модели laravel eloquent.
После вызова curl вы можете использовать класс модели NewsFeed и метод ::create() для создания новой записи newsfeed:
foreach($arrayResult['article'] as $value)
{
if (NewsFeed::where('headline', $value['headline'])->exists()) {
continue;
}
NewsFeed::create([
'id' => $value['@attributes']['id'],
'headline' => $value['headline'],
'body' => $value['body'],
'image_header' => 'https://images.performgroup.com'.$value['links']['link'][0]['@attributes']['url'],
'image_teaser' => 'https://images.performgroup.com'.$value['links']['link'][1]['@attributes']['url'],
'image_mobile' => 'https://images.performgroup.com'.$value['links']['link'][2]['@attributes']['url'],
'image_source' => 'https://images.performgroup.com'
]);
}
Здесь мы сначала проверяем, существует ли newsfeed, проверяя, есть ли какие-либо с тем же headline, который мы пытаемся сохранить. Если он существует, мы пропускаем его.
Если newsfeed с headline не существует, мы используем метод ::create() для создания нового NewsFeed. Это должно создать новую запись.
Примечание: Ваша ссылка image_source не заполнена.
На какой модели вы хотите сохранить данные