使用laravel 5.3无法在Eloquent中保持一对多的关系

时间:2016-10-13 11:38:42

标签: laravel laravel-5.3

我正在使用laravel eloquent模型,因此有三个表tempsocials,tempusers和tempdevices。因此,一个用户可以拥有多个设备和多个社交帐户。 我为上面的三个表创建了一个模型,并试图保持之间的关系,如下面的

这是我的Tempuser模型:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tempuser extends Model
{
    public function tempsocials(){
        return $this->hasMany('App\Tempsocial');
    }

    public function tempdevices(){
        return $this->hasMany('App\Tempdevice');
    }
}

这是我的Tempdevice模型:

 namespace App;

use Illuminate\Database\Eloquent\Model;

class Tempdevice extends Model
{
    public function tempusers(){

        return $this->belongsTo('App\Tempuser');
    }
}

这是最后一个Tempsocial模型:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tempsocial extends Model
{
    public function tempusers(){

        return $this->belongsTo('App\Tempuser');
    }
}

现在这是我的控制器,我想要检索特定用户的所有设备和社交帐户

    namespace App\Http\Controllers;

    use Illuminate\Http\Request;
    use Illuminate\Database\Eloquent\Collection;
    use App\Http\Requests;
    use App\tempLogin;
    use App\Tempdevice;
    use App\Tempuser;
    use App\Tempsocial;

    class loginController extends Controller
    {
        public function check_credentials(Request $request){

          $count=0;

          if($request->header('content-type')=='application/json'){


            $temp=new Tempuser;
            $devices = $temp->tempdevices();
            return $devices;

          }
       }
  }

但是我得到了以下错误:

  

类Illuminate \ Database \ Eloquent \ Relations \ HasMany的对象可以   不能转换为字符串

1 个答案:

答案 0 :(得分:0)

你正在创建一个新的Tempuser(),它没有id,所以你的关系没有按预期返回任何内容,你需要将id传递给方法,并且使用该id可以执行以下操作:

Tempuser::find($id);

然后,这将返回一个实际模型,而不是创建一个新模型。

另外,因为当您将->tempdevices()作为函数调用时,它将返回一个查询构建器,而当您执行->tempdevices时,它将返回一个集合,将其更改为:

$devices = $temp->tempdevices;

此外,如果你期望一个json响应(如果不是这种情况你可以忽略这部分),那么最好还是在你的回复中说明:

return response()->json($devices);