Я хочу сделать API (я использую Laravel 4.2 для бэкэнда) для использования ионного приложения.
например:
// Я сделал следующие $ туристов:
$tourists = User::where('block','0')
->where('guider', 1)
->where('location', $location)
->orderBy($orderBy, 'desc')
->orderBy('updated_at', 'desc')
->get();
return View::make('frontend.data.touristsData',array('tourists'=>$tourists));
// touristData:
<?php
echo json_encode($tourists);
// использовал его в моем app.js (ionic):
.controller('listController', ['$scope','$http','$state','$ionicModal', function($scope, $http, $state,$ionicModal){
$http.get("./touristsData").success(
function(data){
$scope.tourists = data;
......
// используется в html
<div>{{tourists.username}}: {{tourists.intro}}</div>
// выше для одной таблицы
но что, если у меня есть две таблицы, например, таблица пользователей и таблица сообщений
// таблица пользователей (миграция laravel)
$table -> increments('id');//id auto_increment
$table -> string('username',30);
$table -> string('email',60) -> unique();
$table -> string('password',64);
$table -> boolean('admin')->default(0);
$table -> boolean('block')->default(0);
$table -> integer('tradeTime');
$table -> string('nationality', 50);
// таблица сообщений
$table->increments('id');
$table -> integer('needHour');$table -> string('travelDestination',40);
$table -> text('intro',300);
$table -> string('otherWords', 100);
$table->integer('user_id');
$table->softDeletes();
$table ->timestamps();
//user.php
<?php
use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
protected $guard = array('email', 'password');
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password', 'remember_token');public function posts(){
return $this->hasMany('Posts');
}
//post.php
<?php
use Illuminate\Database\Eloquent\SoftDeletingTrait;
class post extends Eloquent{
use SoftDeletingTrait;
protected $dates = ['deleted_at'];
protected $fillable = ['needHour', 'travelDestination','intro','otherWords'];public function user()
{
return $this->belongsTo('User');
}
}
мы можем видеть, что таблица пользователей и таблица сообщений связаны друг с другом user_id,
поэтому мой вопрос заключается в том, как мы можем вывести содержимое двух таблиц вместе, точно так же, как и выше, который имеет только одну таблицу для вывода (это легко)?
то, что я хочу achevie, похоже на следующий код:
<div>{{tourists.username}} : {{tourists.travelDestination}}</div>
Есть много способов достичь этого.
Вы можете использовать соединения
$userWithDestinations = User::where('condition')->join('destination_table', function ($join)
{
$join->on('user.userID', '=', 'post_table.userID')
})->where('moreConditions')->get()
Вы можете использовать Laravel Eager Загрузка (Я настоятельно рекомендую этот подход для многократного использования)
Ваша модель пользователя может выглядеть так
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'users';
public function posts()
{
return $this->hasMany('App\Posts');
}
}
Для того, чтобы сделать что-то вроде этого:
$userWithDestinations = User::where('condition')->with(['posts'])->where('moreConditions')->get();
Этот последний код, использующий энергичную загрузку, сгенерирует данные JSON следующим образом:
[
{
userID:1,
name: Luis,
posts:
[
{
postID: 1,
travelDestination: 'Mexico'
},
{
postID: 11,
travelDestination: 'France'
},
]
},
{
userID:13,
name: John,
posts:
[
{
postID: 14,
travelDestination: 'Germany'
},
{
postID: 55,
travelDestination: 'Brazil'
},
]
}
]
Поскольку ваши USER-POSTS — это отношение 1-N, в Angular вы можете сделать что-то вроде следующего кода, если вы хотите получить только первое сообщение для пользователя.
{{tourist.username}} : {{tourist.posts[0].travelDestination}}
Larevel Model Docs
https://laravel.com/docs/5.1/eloquent-relationships
НОТА
Краткое изложение вашего вопроса на самом деле не о «создании API», это скорее сомнение в модели Laravel.
Других решений пока нет …